我有一个32位进程,可以在32位或64位Windows中运行。因此,当然,如果进程尝试访问文件c:\windows\system32\file.ext
,则会将其重定向到c:\windows\SysWOW64\file.ext
。到目前为止一直很好 - 我不想禁用重定向。
我的问题是我的流程实际上并没有访问该文件 - 而是只是将其路径和将其写入文本文件,我想要该文本文件在64位系统上读取SysWOW64
,在32位系统上读取system32
。我怎么能这样做?
答案 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位进程将获得:
祝你好运
答案 2 :(得分:-1)
System32 C:\ Windows \ System32用于64位文件的Windows系统文件夹(系统目录) SysWOW64 C:\ Windows \ SysWOW64用于32位文件的Windows系统文件夹(系统目录) 程序文件C:\ Program Files 64位程序文件的文件夹 程序文件(x86)C:\ Program Files(x86)32位程序文件的文件夹