0

我正在尝试替换C:\Windows\System32目录中的文件,但它不起作用。

(对于那些说我的程序是病毒的人:不,不是!)

关于环境的一些信息:

  • 视窗 7 SP1
  • 视觉工作室 2012
  • C# WPF 程序

我已经添加了应用程序清单并更改了requestedExecutionLevel.

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

我也尝试使用 BATCH 替换文件,但我得到了同样的错误。

有什么办法可以替换文件吗?

例如明确要求FileIOPermissions.Writeor .AllAccess

4

1 回答 1

1

如果您的系统是 64 位,但您的应用程序是 32 位,这可能会有所帮助。来自张大龙对微软论坛上C# 问题 Can't copy files under C:\Windows\System32\inetsrv\config 的回答:

因为很多应用程序都将 System32 目录名称硬编码到路径中,所以 MS 将 64 位系统文件放在那里,而不是放在“System64”目录中。32 位版本现在进入“SysWOW64”目录。但为了防止破坏 32 位程序,系统默认为尝试访问“System32”目录的 32 位进程执行重定向。在大多数情况下,每当 32 位应用程序尝试访问 %windir%\System32 时,访问都会重定向到 %windir%\SysWOW64。

绕过此重定向的一种简单方法是使用 %windir%\Sysnative 而不是 %windir%\System32。Win64 会将该目录“重定向”到实际的 System32 目录。

您可以使用Wow64DisableWow64FsRedirection()API 完全禁用此重定向。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa384187.aspx

于 2013-11-13T09:22:47.120 回答