【问题标题】:How do I programmatically retrieve the actual path to the "Program Files" folder? [duplicate]如何以编程方式检索“程序文件”文件夹的实际路径? [复制]
【发布时间】:2010-11-08 07:21:26
【问题描述】:

可能重复:
C# - How to get Program Files (x86) on Windows Vista 64 bit

我意识到用户更改 Windows 默认值 C:\Program Files 的可能性相当小,但奇怪的事情发生了!

如何从系统中获取到Program Files 的正确路径?

【问题讨论】:

  • 可能性不大 - 在西班牙语版本上,默认路径是 C:\Archivos de programa\ 这就是为什么任何理智的开发人员都应该从系统中检索路径,而不是对其进行硬编码。
  • ...对于瑞典语版本,默认路径是 c:\program\。绝对避免硬编码。
  • 意大利语是 C:\Programmi

标签: c# .net windows windows-xp program-files


【解决方案1】:
Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") ?? Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)

在 64 位 Windows 中获取“程序文件 (x86)”,在 32 位中获取“程序文件”。

【讨论】:

    【解决方案2】:

    只是为了补充。

    如果您在 32 位模式下运行(即使在 64 位操作系统上),SpecialFolder.ProgramFiles 和 %PROGRAMFILES% 将返回 ..Program Files (x86)。

    如果您特别需要其中一个和/或另一个,则需要进行如下检查:

    32位系统:

    SpecialFolder.ProgramFiles = ..程序文件\

    32 位进程中的

    64 位系统: SpecialFolder.ProgramFiles = ..程序文件 (x86)\ Environment.GetEnvironmentVariable("ProgramW6432") = ..程序文件\

    64 位进程中的

    64 位系统: SpecialFolder.ProgramFiles = ..程序文件\ Environment.GetEnvironmentVariable("PROGRAMFILES(X86)") = ..程序文件 (x86)\

    显然这取决于您的语言环境等...

    【讨论】:

    • 谢谢!作为后续(因为我需要它),还有用于公共文件夹的 CommonProgramW6432 环境变量。
    【解决方案3】:

    Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) 可能是最好的解决方案,但另一个可能的变体是评估ProgramFiles 环境变量的值。为此,您可以使用Environment 类的GetEnvironmentVariableExpandEnvironmentVariables 方法:

    Environment.GetEnvironmentVariable("ProgramFiles")
    
    Environment.ExpandEnvironmentVariables("%ProgramFiles%")
    

    【讨论】:

    • 或 Environment.GetEnvironmentVariable("ProgramFiles") ?
    【解决方案4】:

    您将在 Environment 类中使用 GetFolderPath

    try {
        Environment.GetFolderPath( Environment.SpecialFolder.ProgramFiles )
    catch( ArgumentException ex ) {
        Console.Out.WriteLine( ex.StackTrace );
    }
    

    【讨论】:

      【解决方案5】:

      .NET 为程序文件、我的文档等提供了“special folders”的枚举。

      将枚举转换为实际路径的代码如下所示:

      Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
      

      http://msdn.microsoft.com/en-us/library/14tx8hby.aspx

      【讨论】:

      • 如果我没记错的话,这里有个问题:它不区分 x64 和 x86 版本的 Windows。如果您正在寻找 %programfiles(x86)%,则必须找到另一种方法。
      • 确实!有一个涉及 x64 问题的相关问题:stackoverflow.com/questions/194157/…
      • 在 64 位操作系统上,这取决于您编译的平台。例如。如果您为 AnyCPU 或 x64 编译,这将为您提供 C:\Program Files。如果您为 x86 编译,这将为您提供 C:\Program Files (x86)。
      【解决方案6】:

      您可以访问名为:%PROGRAMFILES% 的环境变量

      即:

      %PROGRAMFILES%\Maxis\SimCity
      

      在 C# 中:

      System.Environment.SpecialFolder.ProgramFiles
      

      【讨论】:

      • 更正:应该是 %PROGRAMFILES%\Maxis\SimCity。 %PROGRAMFILES% 变量已包含“C:\”。
      • 啊!谢谢梅鲁斯。现在改...
      猜你喜欢
      • 2011-08-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      相关资源
      最近更新 更多