使用c#从WindowsSystem32目录中删除文件
本文关键字:删除 文件 WindowsSystem32 使用 | 更新日期: 2023-09-27 18:01:18
我正在开发一个c#应用程序,需要删除System32中的几个文件,我正在做以下操作:
File.Delete(@"c:'windows'system32'<file>");
这不起作用,它不会抛出异常,但也不会删除文件。我认为这与权限有关,但我不知道如何修复它。你能帮忙吗?
好吧,让我们假设你没有做什么恶意的事情。不管怎么说,我还没试过,但是模拟会有帮助。
Google impersonation c#,你会看到很多例子,邮件的思想很简单:你的代码通常在你的用户的权限下运行。通过模拟,您可以在另一个用户的权限下运行代码(以编程方式,用户不需要执行任何操作)。因此,如果用户在没有UAC限制的情况下直接访问那个文件夹,那么理论上,它应该运行那个文件夹。但是,我还没有尝试过,所以如果它不起作用,请不要生气。这只是一个想法。
如果你在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>