如何获取system32或SysWOW64的正确路径?

4

我有一个32位进程,可以在32位或64位的Windows上运行。因此,如果该进程尝试访问文件c:\windows\system32\file.ext,它将被重定向到c:\windows\SysWOW64\file.ext。目前为止一切都好-我不想禁用重定向。

我的问题是,我的进程实际上并没有访问该文件-相反,它只取得其路径并将其写入文本文件,我希望在64位系统上该文本文件读取SysWOW64,在32位系统上读取system32。我该怎么办?


你使用哪种编程语言?C/C++/C#?.Net,Boost,STL? - Caladain
哎呀,我知道我会忘记某些东西的 :) 在Python、C#和简单批处理文件之间犹豫不决。 - Yodan Tauber
可能是重复的问题:使用32位应用程序获取syswow64目录 - jamesmortensen
3个回答

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
将此标记为已接受的答案,尽管它提供了与其他答案相同的解决方案,因为它提供了一个可工作的代码片段。谢谢! - Yodan Tauber
2
在 .NET 4.0 及更高版本中,您可以这样做:Environment.GetFolderPath(Environment.SpecialFolder.SystemX86) - robertburke

4
如果我理解正确,您可以使用SHGetSpecialFolderPath将CSIDL_SYSTEMX86传递给csidl参数。有关有效的csidl’s的文档说明32位进程将获得:

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

此致


-1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接