我正在尝试在系统目录中找到一个文件。 问题在于使用时
Environment.SystemDirectory
在x64机器上,我仍然在获取System32目录,而不是Systemwow64目录。
我需要在x86机器上获取“System32”目录,在x64上获取“SystemWow64”目录
有什么想法吗?
修改 要找到SysWow64,我正在使用“GetSystemWow64Directory”。 (更多信息请访问:pinvoke 请注意,在非x64机器上 - 结果为'0'。 希望这有助于某人
答案 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));