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

本文关键字:程序 文件 路径 x64 检索 32位 进程 | 更新日期: 2023-09-27 17:50:48

首先介绍一下背景。我已经为我的WiX安装程序创建了一个WPF引导程序应用程序,我需要在其中检索和显示默认安装位置。除非我做错了什么,否则WiX创建的可执行文件似乎总是32位的,即使我的Visual Studio配置设置为x64,这导致了我的问题。

因为可执行文件总是32位的,所以包含我的WPF引导程序应用程序的库也被加载为32位,即使我想安装我的x64 msi文件。因此,当我尝试使用Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)检索默认安装路径时,我得到C:'Program Files (x86)而不是C:'Program Files。在64位操作系统上运行时,我如何从32位进程中检索C:'Program Files ?

我发现了类似的问题,但我没有找到一个足够的答案,我想要一个解决方案,即使操作系统语言不是英语。我正在考虑从检索路径中删除"(x86)",但它似乎很黑客,我不确定它是否会在所有情况下工作。

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

如果操作系统是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);