如何检索system32或SysWOW64的正确路径?

时间:2010-06-22 15:16:37

标签: windows 32bit-64bit win64

我有一个32位进程,可以在32位或64位Windows中运行。因此,当然,如果进程尝试访问文件c:\windows\system32\file.ext,则会将其重定向到c:\windows\SysWOW64\file.ext。到目前为止一直很好 - 我不想禁用重定向。

我的问题是我的流程实际上并没有访问该文件 - 而是只是将其路径和将其写入文本文件,我想要该文本文件在64位系统上读取SysWOW64,在32位系统上读取system32。我怎么能这样做?

3 个答案:

答案 0 :(得分:8)

以下代码将返回正确的系统目录(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

希望这是有帮助的

答案 1 :(得分:4)

如果我理解正确,您可以使用SHGetSpecialFolderPath将CSIDL_SYSTEMX86传递给csidl参数。 valid csidl's的文档指出32位进程将获得:

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

祝你好运

答案 2 :(得分:-1)

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