如何检索system32或SysWOW64的正确path?

我有一个可以在32位或64位Windows上运行的32位进程。 所以,自然,如果进程试图访问文件c:\windows\system32\file.ext ,它将被redirect到c:\windows\SysWOW64\file.ext 。 到目前为止这么好 – 我不想禁用redirect。

我的问题是,我的进程并没有实际访问该文件 – 而只是采取其path,并将其写入文本文件 ,我希望该文本文件读取64位系统上的SysWOW64和32位系统上的system32 ,位系统。 我怎样才能做到这一点?

以下代码将返回正确的系统目录(system32 \ syswow64):

 [DllImport("shell32.dll")] public static extern bool SHGetSpecialFolderPath( IntPtr hwndOwner, [Out]StringBuilder lpszPath, int nFolder, bool fCreate ); public static string GetSystemDirectory() { StringBuilder path = new StringBuilder(260); NativeMethods.SHGetSpecialFolderPath(IntPtr.Zero, path, 0x0029, false); return path.ToString(); } 

在x86上,您将获得%windir%\ System32在X64上,您将获得%windir%\ SysWow64

希望这是有帮助的

如果我理解正确,可以使用SHGetSpecialFolderPath将CSIDL_SYSTEMX86传递给csidl参数。 有效的csidl文档声明一个32位进程将得到:

  • 32位操作系统上的%windir%\ system32
  • 在64位操作系统上的%windir%\ syswow64

最好的祝福

System32 C:\ Windows \ System32用于64位文件的Windows系统文件夹(系统目录)SysWOW64 C:\ Windows \ SysWOW64用于32位文件的Windows系统文件夹(系统目录)程序文件64位的C:\ Program Files文件夹程序文件Program Files(x86)C:\ Program Files(x86)32位程序文件的文件夹