当应用程序运行时,我必须将psTool实用程序复制到System32文件夹。
我在64位Windows 7上,每当我试图通过system32将exe复制到File.Copy位文件夹时,该exe总是被复制到SysWow64中。
当我在destFile上放置一个断点时,路径显示为C:\Windows\System32,但是文件没有进入那里(转到sysWow64)。我已经尝试过Special Folder SystemX86,但是文件又转到了sysWOW64。
string sourceFile = "C:\bin\Debug\somexe.exe"
string destFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), utilityName);
File.Copy(sourceFile, destFile, true);有什么建议吗我在这里错过了什么?
编辑
正如下面的答案所指出的,文件系统重定向正在发生。我正在为64位操作系统上的控制台应用程序开发带有Visual默认设置的应用程序。我不确定在编译过程中需要保留哪些设置/开关,这样应用程序才能同时在32位和64位操作系统上工作。
基本上,它应该只将文件复制到System32,而不管它是什么位操作系统。
在程序的后面,我必须通过命令行访问psTools实用程序,如果我将它放在SysWOW64中,它是不可用的。如果我进行更改,使用SysWOW64 64的32位cmd.exe,这将再次是64位平台特定的东西,我不想选择。
有什么解决方案可以让应用程序在32位和64位上运行而没有问题?我是否必须修改代码(如何修改?)或者我必须修改这个控制台应用程序项目的一些属性(哪些属性)?
发布于 2012-04-11 05:42:04
你和文件系统重定向发生了冲突。
由于%windir%\System32专为64位应用程序保留,所以在64位版本的%windir%\System32上,尝试访问%windir%\System32目录的32位应用程序将自动和透明地重定向到32位%windir%\SysWOW64目录。
首先,确保您的程序确实属于64位系统文件夹.Windows进行这种自动重定向是有原因的。在64位版本的%windir%\System32 上,32位的东西不属于文件夹。
如果您确定要将内容复制到64位系统目录中,则有几个选项。最简单的方法可能是将您的实用程序编译为64位应用程序。或者,您可以告诉WOW64重定向器,您知道自己在做什么,而不是使用%windir%\Sysnative而不是%windir%\System32来执行重定向。
发布于 2014-04-27 18:59:22
我也有同样的问题。解决方案是将"Platform target“设置为x64或AnyCPU,而不是在Visual中的项目属性中设置x86。在这种情况下,路径将是"C:\Windows\system32",不会重定向到"C:\Windows\SysWOW64",您可以在“C:\Windows\SysWOW64 64”文件夹中放置任何文件,然后使用File.Exists命令检查是否在该文件夹中找到文件:
File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), sFileName));或
File.Exists(Path.Combine(Environment.SystemDirectory, sFileName));

发布于 2016-06-24 19:11:40
我在我的32位应用程序中使用helper属性,它总是返回本机system32文件夹。helper属性是:
public static string NativeSystemPath
{
get
{
if (Environment.Is64BitOperatingSystem)
{
return System.IO.Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.Windows),
"Sysnative");
}
return Environment.GetFolderPath(Environment.SpecialFolder.System);
}
}https://stackoverflow.com/questions/10100390
复制相似问题