使用C#从Windows \ System32目录中删除文件

我正在开发一个C#应用程序,需要删除System32中的一些文件,我正在做下面的事情:

File.Delete(@"c:\windows\system32\<file>"); 

这是行不通的,它不会抛出exception,但它也不会删除文件。 我认为这是相关的权限,但我不知道如何解决它。 你能帮我吗?

那么,让我们假设你没有做任何恶意的事情)无论如何,还没有尝试过,但模拟会有所帮助。

谷歌模拟C#,你会看到很多的例子,而且邮件的想法很简单:你的代码通常在用户的权限下运行。 通过模拟,您可以在另一个用户的权限下运行您的代码(编程式地,用户不需要做任何事情)。 因此,如果用户可以直接访问该文件夹而不需要UAC restirction,那么理论上应该只是运行。 但是,我还没有尝试过,所以不要生气,如果不行的话。 只是一个想法。

如果您在Vista或7(或server 2008+)上执行此操作,则UAC也会妨碍您的删除操作。 在这种情况下,您需要修改应用程序的清单,以便在启动时提升其权限(或者启动提升的子应用程序或进程):

http://victorhurdugaci.com/using-uac-with-c-part-1/

另外,如果你发布了异常,这将是有帮助的,因为这会提示是否与权限相关,与x64相关还是UAC。

您需要管理员权限才能修改该文件夹中的文件。 在属性中使用app.manifest文件,如下所示:

 <?xml version="1.0" encoding="utf-8"?> <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <assemblyIdentity version="1.0.0.0" name="YourApplication.app" /> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> </requestedPrivileges> <applicationRequestMinimum> <defaultAssemblyRequest permissionSetReference="Custom" /> <PermissionSet ID="Custom" SameSite="site" Unrestricted="true" /> </applicationRequestMinimum> </security> </trustInfo> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.--> <!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node--> <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>--> </application> </compatibility> <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) --> <!-- <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="789cf14ab782c1eb" language="*" /> </dependentAssembly> </dependency>--> </asmv1:assembly>