How do I programmatically retrieve the actual path to the "Program Files" folder?

39,763

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
Share:
39,763

Related videos on Youtube

brasskazoo
Author by

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, 2022

Comments

  • brasskazoo
    brasskazoo almost 2 years

    Possible Duplicate:
    C# - How to get Program Files (x86) on Windows Vista 64 bit

    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?

    • sharptooth
      sharptooth almost 15 years
      Odds 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
      lemonad almost 15 years
      ...and for the Swedish version the default path is c:\program\. Definitely avoid hardcoding.
    • M.Turrini
      M.Turrini almost 15 years
      And in Italian it's C:\Programmi
  • Merus
    Merus almost 15 years
    A correction: It should be %PROGRAMFILES%\Maxis\SimCity. The %PROGRAMFILES% variable already contains the 'C:\'.
  • Jeff Meatball Yang
    Jeff Meatball Yang almost 15 years
    Ah! thanks Merus. Changing it now...
  • user2507101
    user2507101 almost 15 years
    There 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
    brasskazoo almost 15 years
    Indeed! There is a related question that covers the x64 issue: stackoverflow.com/questions/194157/…
  • brasskazoo
    brasskazoo almost 15 years
    or Environment.GetEnvironmentVariable("ProgramFiles") ?
  • Helen
    Helen almost 15 years
    On 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
    testalino about 10 years
    Thank you! Just as a follow up (because I needed that), there is also the CommonProgramW6432 environment variable for the common files folder.