How do I programmatically retrieve the actual path to the "Program Files" folder?
Solution 1
.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)
http://msdn.microsoft.com/en-us/library/14tx8hby.aspx
Solution 2
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...
Solution 3
You would use GetFolderPath in the Environment class.
try {
Environment.GetFolderPath( Environment.SpecialFolder.ProgramFiles )
catch( ArgumentException ex ) {
Console.Out.WriteLine( ex.StackTrace );
}
Solution 4
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%")
Solution 5
You can access the environment variable called: %PROGRAMFILES%
i.e:
%PROGRAMFILES%\Maxis\SimCity
in C#:
System.Environment.SpecialFolder.ProgramFiles
Related videos on Youtube
brasskazoo
I am a Software and Cloud Solutions Engineer with a passion for building quality and automation into the development, testing and deployment lifecycles. Currently working with a large AWS hybrid-cloud integration project, including VPC architecting and solution design, serverless applications and shifting applications to EC2. Primarily I work with terraform, node.js, react and java, with side projects currently in react-native and GraphQL for cross-platform mobile applications. Agile, DevOps culture, Code Quality and Continuous Integration are cornerstones of my development efforts.
Updated on July 09, 2022Comments
-
brasskazoo almost 2 years
Possible Duplicate:
C# - How to get Program Files (x86) on Windows Vista 64 bitI 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?-
sharptooth almost 15 yearsOdds ore not that slim - on Spanish version the default path is C:\Archivos de programa\ That's why any sane developer should retrieve the path form the system, not hardcode it.
-
lemonad almost 15 years...and for the Swedish version the default path is c:\program\. Definitely avoid hardcoding.
-
M.Turrini almost 15 yearsAnd in Italian it's C:\Programmi
-
-
Merus almost 15 yearsA correction: It should be %PROGRAMFILES%\Maxis\SimCity. The %PROGRAMFILES% variable already contains the 'C:\'.
-
Jeff Meatball Yang almost 15 yearsAh! thanks Merus. Changing it now...
-
user2507101 almost 15 yearsThere is a gotcha to this if I recall correctly: it does not distinguish between x64 and x86 versions of Windows. If you're looking for %programfiles(x86)%, you'll have to find another method.
-
brasskazoo almost 15 yearsIndeed! There is a related question that covers the x64 issue: stackoverflow.com/questions/194157/…
-
brasskazoo almost 15 yearsor Environment.GetEnvironmentVariable("ProgramFiles") ?
-
Helen almost 15 yearsOn a 64-bit OS, this depends on the platform you compile for. E.g. if you compile for AnyCPU or x64, this will give you C:\Program Files. If you compile for x86, this will give you C:\Program Files (x86).
-
testalino about 10 yearsThank you! Just as a follow up (because I needed that), there is also the CommonProgramW6432 environment variable for the common files folder.