C# 从32位进程检索x64程序文件路径
首先是一些背景。我已经为我的WiX安装程序创建了一个WPF引导程序应用程序,在这里我需要检索并显示默认的安装位置。除非我做错了什么,否则WiX创建的可执行文件总是32位的,即使我的visualstudio配置设置为x64,这也会导致我的问题 由于可执行文件始终为32位,因此包含WPF引导程序应用程序的库也将以32位加载,即使在我要安装x64 MSI文件时也是如此。因此,当我尝试使用C# 从32位进程检索x64程序文件路径,c#,wix,64-bit,C#,Wix,64 Bit,首先是一些背景。我已经为我的WiX安装程序创建了一个WPF引导程序应用程序,在这里我需要检索并显示默认的安装位置。除非我做错了什么,否则WiX创建的可执行文件总是32位的,即使我的visualstudio配置设置为x64,这也会导致我的问题 由于可执行文件始终为32位,因此包含WPF引导程序应用程序的库也将以32位加载,即使在我要安装x64 MSI文件时也是如此。因此,当我尝试使用Environment.GetFolderPath(Environment.SpecialFolder.Progra
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)
检索默认安装路径时,我得到的是C:\Program Files(x86),而不是C:\Program Files。在64位操作系统上运行时,如何从32位进程检索C:\Program文件
我发现了类似的问题,但我没有找到一个充分的答案,我想要一个解决方案,即使操作系统语言不是英语。我正在考虑从检索到的路径中删除“(x86)”,但它似乎有问题,我不确定它是否在所有情况下都能工作。如果操作系统是64位的,而应用程序是32位的,则可以使用环境变量获取Program Files文件夹(实际上,
环境中有一个特殊的-unsupported。在SHGetSpecialFolderLocation
中有一个特殊的-SpecialFolder
-常量,但这样更简单):
只需检查您的操作系统是否为64位(在32位系统中,此变量未定义):
Environment.GetEnvironmentVariable(“ProgramW6432”);
@codroipo您可能希望将您的评论扩展为完整答案!查找“ProgramW6432”实际上不是一个包罗万象的解决方案。如前所述,“W6432”环境变量(不止一个)仅存在于Windows 7、Windows Server 2008 R2及更高版本中。这意味着不包括Windows Vista、Windows Server 2008、Windows XP和Windows Server 2003。有人可能会说这些操作系统不受支持,或者很快就会受到支持,但这与问题无关。
Environment.GetEnvironmentVariable("ProgramW6432");
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
return Environment.GetEnvironmentVariable("ProgramW6432");
else
return Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);