首先是一些背景。我为我的 WiX 安装程序创建了一个 WPF Bootstrap 应用程序,我需要在其中检索和显示默认安装位置。除非我做错了什么,否则即使我的 Visual Studio 配置设置为 x64,WiX 创建的可执行文件似乎始终是 32 位的,这导致了我的问题。
由于可执行文件始终是 32 位的,因此即使我想安装我的 x64 MSI 文件,包含我的 WPF Bootstrap 应用程序的库也被加载为 32 位。因此,当我尝试使用 Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
检索默认安装路径时,我得到的是 C:\Program Files (x86) 而不是 C:\Program 文件。在 64 位操作系统上运行时,如何从 32 位进程中检索 C:\Program Files?
我发现了类似的问题,但我没有找到足够的答案,我想要一个即使操作系统语言不是英语也能工作的解决方案。我正在考虑从检索到的路径中删除“(x86)”,但它看起来很老套,我不确定它是否适用于所有情况。
最佳答案
如果操作系统是 64 位而您的应用程序是 32 位,您可以使用环境变量获取 Program Files 文件夹(实际上有一个特殊的 - 在 Environment.SpecialFolder
中不受支持- SHGetSpecialFolderLocation
中的常数,但这样更容易):
Environment.GetEnvironmentVariable("ProgramW6432");
只要检查你的操作系统是 64 位的(在 32 位系统中这个变量没有定义):
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
return Environment.GetEnvironmentVariable("ProgramW6432");
else
return Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
关于c# - 从 32 位进程中检索 x64 程序文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30440209/