I realize the odds of a user changing the Windows default of C:\Program Files
is fairly slim, but stranger things have happened!
How can I get the correct path to Program Files
from the system?
I realize the odds of a user changing the Windows default of C:\Program Files
is fairly slim, but stranger things have happened!
How can I get the correct path to Program Files
from the system?
You can access the environment variable called: %PROGRAMFILES%
i.e:
%PROGRAMFILES%\Maxis\SimCity
in C#:
System.Environment.SpecialFolder.ProgramFiles
.NET provides an enumeration of 'special folders' for Program Files, My Documents, etc.
The code to convert from the enumeration to the actual path looks like this:
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
You would use GetFolderPath in the Environment class.
try {
Environment.GetFolderPath( Environment.SpecialFolder.ProgramFiles )
catch( ArgumentException ex ) {
Console.Out.WriteLine( ex.StackTrace );
}
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
is probably the best solution, but another possible variant is evaluating the value of the ProgramFiles
environment variable. For this, you can use the GetEnvironmentVariable
or ExpandEnvironmentVariables
method of the Environment
class:
Environment.GetEnvironmentVariable("ProgramFiles")
Environment.ExpandEnvironmentVariables("%ProgramFiles%")
Just to add to this.
If you're running in 32 bit mode (even on a 64 bit os), SpecialFolder.ProgramFiles and %PROGRAMFILES% will return ..Program Files (x86).
If you specifically need one and/or the other then you'll need to check as follows:
32 bit system:
SpecialFolder.ProgramFiles
= ..Program Files\
64 bit system in 32 bit process:
SpecialFolder.ProgramFiles
= ..Program Files (x86)\
Environment.GetEnvironmentVariable("ProgramW6432")
= ..Program Files\
64 bit system in 64 bit process:
SpecialFolder.ProgramFiles
= ..Program Files\
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)")
= ..Program Files (x86)\
Obviously this depends on your locale etc...