我的应用程序运行时,我必须将psTool实用程序复制到System32文件夹。
我使用的是64位Windows 7,每当尝试通过File.Copy
将exe复制到system32位文件夹时,该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位OS上的控制台应用程序使用Visual Studio的默认设置开发该应用程序。我不确定在编译时必须保留哪些设置/开关,以便该应用程序可以在32位和64位OS上运行。
基本上,无论它是什么操作系统,它都应该仅将文件复制设置为
System32
。在程序的更高版本中,我必须通过命令行访问psTools实用程序,如果将其放在SysWOW64中则无法使用。如果我进行更改,以使用SysWOW64的32位cmd.exe,那么它还是64位平台特定的,我不想选择。
有什么解决方案可以使应用程序同时在32位和64位上运行而不会出现问题?我是否必须修改代码(如何?)还是必须修改此控制台应用程序项目的某些属性(哪些属性)?
最佳答案
您已经违反file system redirection了。
因为%windir%\System32
是专为64位应用程序保留的,所以在Windows的64位版本上,尝试访问%windir%\System32
目录的32位应用程序将自动透明地重定向到32位%windir%\SysWOW64
目录。
首先,请确保您的程序确实属于64位系统文件夹。 Windows执行此自动重定向是有原因的。 32位的内容不会放在Windows的64位版本的%windir%\System32
文件夹中。
如果您确定要将内容复制到64位系统目录中,则有两种选择。最简单的方法可能是将实用程序编译为64位应用程序。另外,您可以使用%windir%\Sysnative
而不是%windir%\System32
告诉WOW64重定向器您知道自己在做什么,并且不执行重定向。
关于c# - 文件复制到SysWOW64而不是System32,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10100390/