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,如果此答案帮助您解决了问题,请将其标记为正确答案,以便其他用户知道这是本网站的惯例。