我的应用程序运行时,我必须将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/

10-11 14:57