使用32位应用程序获取syswow64目录

时间:2010-08-22 09:31:23

标签: .net 64-bit environment-variables

我正在尝试在系统目录中找到一个文件。 问题在于使用时

Environment.SystemDirectory

在x64机器上,我仍然在获取System32目录,而不是Systemwow64目录。

我需要在x86机器上获取“System32”目录,在x64上获取“SystemWow64”目录

有什么想法吗?

修改 要找到SysWow64,我正在使用“GetSystemWow64Directory”。 (更多信息请访问:pinvoke 请注意,在非x64机器上 - 结果为'0'。 希望这有助于某人

4 个答案:

答案 0 :(得分:13)

改为使用Environment.GetFolderPath(Environment.SpecialFolder.SystemX86)

答案 1 :(得分:9)

使用SHGetSpecialFolderPath功能:

[DllImport("shell32.dll")]
public static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, [Out]StringBuilder lpszPath, int nFolder, bool fCreate);

string GetSystemDirectory()
{
    StringBuilder path = new StringBuilder(260);
    SHGetSpecialFolderPath(IntPtr.Zero,path,0x0029,false);
    return path.ToString()
}

将在x86上返回System32,在x64上返回SysWow64

答案 2 :(得分:3)

您的32位程序认为是什么System32实际上是SysWOW64 - 不要编写32位应用程序以获得64位的任何明确知识,这就是WOW64重定向的用途

答案 3 :(得分:0)

我遇到了同样的问题。解决方案是设置"平台目标"在Visual Studio中的项目属性中使用x86而不是AnyCPU或x64。在这种情况下,路径将是"C:\Windows\system32",但它实际上会重定向到"C:\Windows\SysWOW64"您可以通过将任何文件放在" C:\ Windows \ SysWOW64"中来检查这一点。文件夹,然后使用File.Exists命令检查是否在该文件夹中找到文件:

File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), sFileName));

或者

File.Exists(Path.Combine(Environment.SystemDirectory, sFileName));

enter image description here