4

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

我的问题是我的进程实际上并没有访问该文件-相反,它只是获取其路径并将其写入文本文件,并且我希望该文本文件SysWOW64在 64 位系统和system3232 位系统上读取. 我怎样才能做到这一点?

4

3 回答 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

希望这会有所帮助

于 2010-08-22T12:15:47.010 回答
4

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

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

最好的祝福

于 2010-06-23T01:51:46.090 回答
-1

System32 C:\Windows\System32 Windows System folder (system directory) for 64-bit files SysWOW64 C:\Windows\SysWOW64 Windows System folder (system directory) for 32-bit files Program Files C:\Program Files Folder for 64-bit program files Program Files (x86) C:\Program Files (x86) Folder for 32-bit program files

于 2013-01-11T15:25:27.157 回答