Although Precision X1 v1.2.0.0 claims to fix the "missing nvml.dll" error, I still receive the error after reinstalling. I know how to manually bypass it, but for any future others' sake, I rolled up my debugging sleeves and watched it with procmon --
The gist of the problem is when Precision goes looking for nvml.dll, Precision doesn't properly "escape" separation between system/user path variables when it transitions to checking hardcoded locations for nvml.dll, namely "C:\Program Files\NVIDIA Corporation\NVSMI". Here's the location Precision tries to access that folder at:
You can see Precision is concatenating the last USER path location with this folder, and obviously won't find it there. I first thought maybe Precision was tripping up on a character in my (extensive) path, but two hours of path mangling and debugging later, I've found the actual source is Precision not properly handling registry value data type "REG_EXPAND_SZ":
Windows 10 automatically converts an environment variable (like "Path") from "REG_SZ" type to "REG_EXPAND_SZ"
if an expandable environment variable is used anywhere within it. I first thought maybe Precision wasn't properly handling expandable env variables, but testing showed it could: I edited the registry paths directly, sidestepping Windows automatically changing types via System Properties/Settings, and then added expandable env variables to the paths: Precision properly understood and found those locations.
So that left the REG_EXPAND_SZ type. The issue is that Precision loses the final semicolon on the last USER path location and doesn't know where that path ends and the first hardcoded directory begins:
This can be sidestepped by inserting an additional semicolon at the end of the final USER path variable (i.e., when the jump to hardcoded locations begins), however, this can't be done through Windows system properties dialogs since it won't allow a double semicolon, it will instead convert it to a string and semicolon the string, which Precision will trip up on. Only if you manually edit the registry path variable directly and add the double semicolon does it work, like so:
All this wind aside, the real solution is a Precision update so it can properly handle the type/path variable splitting and not lose that final semicolon when REG_EXPAND_SZ type is used.
tl;drIf you get the "
Can't find nvml.dll" error, find and copy the .dll into any directory of your path ...besides the final directory of the User path! Just note it's not good form to be adhoc pasting random .dll's for one off purposes into misc. path locations just to jury-rig something to work, since that floating .dll won't ever get updated unless you manually remember to update it yourself by hand.
post edited by Coldblackice - 2021/05/29 08:28:49