【问题标题】:How do I get the Program Files directory?如何获取 Program Files 目录?
【发布时间】:2016-02-25 08:32:48
【问题描述】:

我正在尝试在 64 位操作系统中获取 Program Files 目录。下面的代码返回相同的答案Program Files (x86)

Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86).ToString());
Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles).ToString());

有什么帮助吗?

【问题讨论】:

  • 你的测试程序编译成32位还是64位?
  • 我在任何 CPU 的调试模式下编译,我尝试在 x86 中编译,但它返回相同的结果
  • 尝试用 x64 编译。
  • 还有一个“Prefer 32 bit”复选框,它可以让 Any CPU 代码在 x86 模式下运行。

标签: c#


【解决方案1】:

这就是你想要的:

Environment.GetEnvironmentVariable("ProgramW6432")

它将返回 x64 程序目录的路径。

有关环境变量和 WOW64 的更多信息,请阅读此处: https://msdn.microsoft.com/en-us/library/windows/desktop/aa384274(v=vs.85).aspx

【讨论】:

  • 这是一个“技巧”。最好使用Environment.SpecialFolder
  • 怎么会是“把戏”?它正在调用一个环境变量,并将返回 OP 之后的值。使用特殊文件夹似乎对他不起作用。
  • 当然,这仅适用于仍具有 WOW64 的 64 位系统。纯 64 位系统必须以 64 位模式运行您的程序,即使标记为“任何 CPU,首选 32 位”(即服务器核心)。
【解决方案2】:

当然,您必须在 64 位模式下运行您的程序。然后这将打印

C:\Program Files (x86)
C:\Program Files 

转到:项目>您的项目属性...>构建>禁用首选32位

【讨论】:

    【解决方案3】:

    为此

    Console.WriteLine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"));
    

    请查看此链接C# - How to get Program Files (x86) on Windows 64 bit

    以上链接显示它将在所有这三种 Windows 配置中返回 x86 Program Files directory

    32 位 Windows
    在 64 位 Windows 上运行的 32 位程序
    在 64 位窗口上运行的 64 位程序

    【讨论】:

      【解决方案4】:

      解决方案:

      我们需要告诉编译器不要偏爱特定的构建平台。

      Go to Visual Studio > Project Properties > Build > Uncheck "Prefer 32 bit"
      

      原因:

      大多数 .NET 项目的默认设置是“任何 CPU 32 位首选”

      当您取消选中 32 位汇编时:

      在 32 位进程上 JIT 到 32 位代码

      在 64 位进程上 JIT 到 32 位代码

      C# 代码:

      Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)

      输出:

      C:\Program Files (x86)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-27
        • 1970-01-01
        • 1970-01-01
        • 2011-05-20
        • 2011-01-18
        相关资源
        最近更新 更多