Currently, I use Path.GetTempPath()
to figure out where to write my log files, but recently I came across a user's machine where the path returned was not what I expected.
Usually, the returned path is C:\Documents and Settings\[userid]\Local Settings\Temp but in this case, it was C:\Temp
This would not normally be a problem, but for some reason the user in question did not have access to write to C:\Temp
I double checked the environment variables, and the USER environment variable was pointing as expected to C:\Documents and Settings\[userid]\Local Settings\Temp, whilst the SYSTEM environment variable was pointing to C:\WINNT\Temp.
So... where is Path.GetTempPath()
getting it's value from ? Group Policy? Registry?
I have Googled, but to no avail.
(Using Reflector) Path.GetTempPath()
ultimately calls the Win32 function GetTempPath (from kernel32.dll). The MDSN docs for this state:
The GetTempPath function checks for the existence of environment variables in the following order and uses the first path found:
- The path specified by the TMP environment variable.
- The path specified by the TEMP environment variable.
- The path specified by the USERPROFILE environment variable.
- The Windows directory.
Note that they also state that it doesn't check whether or not the path actually exists or can be written to, so you may end up trying to write your log files to a path that doesn't exist, or one that you cannot access.