C#替换System32中的文件未经授权访问

C#替换System32中的文件未经授权访问,c#,wpf,replace,file-permissions,system32,C#,Wpf,Replace,File Permissions,System32,我试图替换C:\Windows\System32目录中的一个文件,但它无法工作 (对于那些认为我的程序是病毒的人来说:不,不是!) 有关环境的一些信息: Windows7SP1 Visual Studio 2012 C#WPF计划 我已经添加了应用程序清单并更改了requestedExecutionLevel <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 我还尝试使用批处理

我试图替换
C:\Windows\System32
目录中的一个文件,但它无法工作

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

有关环境的一些信息:

  • Windows7SP1
  • Visual Studio 2012
  • C#WPF计划
我已经添加了应用程序清单并更改了
requestedExecutionLevel

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

我还尝试使用批处理来替换文件,但我得到了相同的错误

有没有办法替换这个文件


例如,明确要求
FileIOPermissions.Write
.AllAccess
如果您的系统是64位的,但您的应用程序是32位的,这可能会有所帮助。根据张大龙在微软论坛上对问题的回答:

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

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

您可以使用
Wow64DisableWow64FsRedirection()
API完全禁用此重定向。有关详细信息,请参阅


您的系统是64位系统吗?您要替换什么文件?什么错误是“无法工作”?请确保文件未在使用中。如果某个进程正在使用该文件,则无法覆盖它。使用WinApi MoveFileEx命令在重新启动时进行替换。感谢您的回答!我试过了,它似乎有效。(使用sysnative!)@BerndF,如果此答案帮助您解决了问题,请将其标记为正确答案,以便其他用户知道这是本网站的惯例。