一尘不染

文件被复制到SysWOW64而不是System32

c#

我的应用程序运行时,我必须将psTool实用程序复制到System32文件夹。
我使用的是64位Windows 7,每当尝试通过exe将exe复制到system32位文件夹时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位OS上的控制台应用程序使用Visual
Studio的默认设置开发该应用程序。我不确定在编译时必须保留哪些设置/开关,以便该应用程序可同时在32位和64位OS上运行。
基本上,它应该只将文件复制设置为,System32无论它是什么操作系统。
在程序的更高版本中,我必须通过命令行访问psTools实用程序,如果将其放在SysWOW64中将不可用。如果要进行更改,以使用SysWOW64的32位cmd.exe,这又将是特定于64位平台的,我不想选择。

有什么解决方案可以使应用程序同时在32位和64位上运行而不会出现问题?我必须修改代码(如何?)还是必须修改此控制台应用程序项目的某些属性(哪些属性)?


阅读 1383

收藏
2020-05-19

共1个答案

一尘不染

您已经违反了文件系统重定向

因为%windir%\System32是专门为64位应用程序保留的,所以在64位版本的Windows上,尝试访问该%windir%\System32目录的32位应用程序将自动透明地重定向到32位%windir%\SysWOW64目录。

首先,请确保您的程序 确实属于64位系统文件夹 。Windows执行此自动重定向是有原因的。 Windows 64位版本上
%windir%\System32文件夹中没有32位内容

如果您确定要将内容复制到64位系统目录中,则有两种选择。最简单的方法可能是将实用程序编译为64位应用程序。或者,您可以通过使用%windir%\Sysnative代替来告诉WOW64重定向器您知道自己在做什么,并且不执行重定向%windir%\System32

2020-05-19