WOW64:从32位进程获得x64%CommonProgramFiles%

问题描述:

我试过的查询:ExpandEnvironmentStrings("%COMMONPROGRAMFILES%"),GetSpecialPath(CSIDL_PROGRAM_FILES_COMMON)WOW64:从32位进程获得x64%CommonProgramFiles%

从我的32位应用程序中解析出(通常)c:\\Program Files (x86)\\Common Files。我需要检查安装(通常)在64位应用程序的c:\\Program Files\\Common Files下的文件版本。

在64位操作系统上,ProgramW6432环境变量指向C:\程序文件。完整的列表在英语版本的Windows的32位应用程序:

  • PROGRAMFILES => C:\ Program Files文件(x86)的
  • PROGRAMFILES(X86)=> C:\ Program Files文件(86)
  • ProgramW6432 => C:\程序文件
  • COMMONPROGRAMFILES => C:\程序文件(86)\公用文件
  • COMMONPROGRAMFILES(86)=> C:\程序文件(86)\公用文件
  • CommonProgramW6432 => c:\ program files \ common files

只是提醒一下:该文件夹不应包含32位程序感兴趣的任何内容。技术上。当心文件系统重定向器,它会将文件请求从c:\ program files重定向到c:\ program files(x86)。如果你真的想访问那个目录中的文件,你必须使用Wow64DisableWow64FsRedirection()。

+0

我只是检查一个必需的(64位)应用程序已经安装。 – peterchen 2010-03-30 07:38:35

static string ProgramFilesx86() 
     { 
      if (8 == IntPtr.Size 
       || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432")))) 
      { 
       return Environment.GetEnvironmentVariable("ProgramFiles(x86)"); 
      } 

      return Environment.GetEnvironmentVariable("ProgramFiles"); 
     } 

这是你所需要的吗?

+0

这肯定不像C++。也许C++/CLI,但我敢打赌C#猜测。 – 2010-03-29 21:25:02

+0

我可以发誓我在标签上看到了C#。抱歉。 – 2010-03-29 21:41:37

%CommonProgramW6432%

+0

谢谢!不知何故,我错过了env变量列表。 – peterchen 2010-03-30 07:38:52