Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从32位进程检索x64程序文件路径_C#_Wix_64 Bit - Fatal编程技术网

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

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

首先是一些背景。我已经为我的WiX安装程序创建了一个WPF引导程序应用程序,在这里我需要检索并显示默认的安装位置。除非我做错了什么,否则WiX创建的可执行文件总是32位的,即使我的visualstudio配置设置为x64,这也会导致我的问题

由于可执行文件始终为32位,因此包含WPF引导程序应用程序的库也将以32位加载,即使在我要安装x64 MSI文件时也是如此。因此,当我尝试使用
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);