c# - 从 32 位进程中检索 x64 程序文件路径

标签 c# wix 64-bit

首先是一些背景。我为我的 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/

相关文章:

c# - 使用FormBuilder时如何设置Facebook的ChannelData?

wix - 以管理员身份运行启动时的快捷方式

c++ - SSE 优化的 64 位整数模拟

java - 如何在 Windows 2008 上将 64 位 Java ODBC 驱动程序与 Access 数据库一起使用?

c# - 如何从 Controller 调用我的模型?

c# - 有什么方法可以使用 c# 使用 rest api 在一次调用中将多个注释发送到 salesforce

c# - 如何在 .NET Core Razor 页面中使用 Setter 扩展 UserManager?

wix - 使用 wix 工具集合并两个 MSI

wix - 在 WIX MSI 描述中设置标题

macos - 如何解决我在尝试将 C++ 与 Assembly 链接时遇到的这个链接器错误?