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