c# 删除 System32 文件夹中的文件

本文关键字:文件 文件夹 删除 System32 | 更新日期: 2023-09-27 17:56:16

im 尝试删除 system32 中的特定文件,但由于这是所有重要文件所在的位置,因此很难从那里删除内容。到目前为止,我能做到这一点的唯一方法是,如果我进入属性并更改权限,以便我可以完全控制该文件,然后将其删除。

正在尝试以编程方式执行此操作,我尝试了许多更改文件权限的方法,但我只是收到错误"未经授权",即使在使用 takeown/等命令提升的 cmd 中也不起作用,我知道如果我可以在 cmd 中做到这一点,我可以通过编程方式执行此操作,以便也可以工作。

任何帮助都是值得的

c# 删除 System32 文件夹中的文件

由于 UAC,您应该提升权限。下面是一个示例,用于检查运行应用的当前用户是否具有提升的权限,如果没有,则退出并使用管理员权限重新运行应用。

WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);
if (!hasAdministrativeRight)
{
    RunElevated(Application.ExecutablePath);
    this.Close();
    Application.Exit();
}
private static bool RunElevated(string fileName)
{
    //MessageBox.Show("Run: " + fileName);
    ProcessStartInfo processInfo = new ProcessStartInfo();
    processInfo.UseShellExecute = true;
    processInfo.Verb = "runas";
    processInfo.FileName = fileName;
    try
    {
        Process.Start(processInfo);
        return true;
    }
    catch (Win32Exception)
    {
        //Do nothing as user cancelled UAC window.
    }
    return false;
}

取得文件的所有权并删除

new Process() { StartInfo = new ProcessStartInfo("cmd.exe", @"/k takeown /f C:'Windows'System32'testfile.txt && icacls C:'Windows'System32'testfile.txt /grant %username%:F") }.Start();
File.Delete(@"C:'Windows'System32'testfile.txt");
进一步的

研究表明,有一种更好的方法可以做到这一点。继续;

创建应用程序清单

通过执行此操作,您无需检查应用程序中的管理员权限,也无需在需要时重新启动。默认情况下,应用将使用提升的凭据启动。只需将>新项>应用程序清单添加到项目中并取消注释以下行;

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

在代码中设置文件访问权限并删除文件

System32 文件夹中应该有一个 lincense.txt 文件。我们可以通过以下方式删除它;

        FileInfo insInfo = new FileInfo(@"C:'Windows'System32'license.txt");
        FileSecurity insFileSecurity = insInfo.GetAccessControl();
        insFileSecurity.AddAccessRule(new FileSystemAccessRule(System.Environment.UserDomainName + "''" + System.Environment.UserName, FileSystemRights.FullControl, AccessControlType.Allow));
        insInfo.SetAccessControl(insFileSecurity);
        File.Delete(@"C:'Windows'System32'license.txt");

注意:一旦您设置了应用程序清单,并要求提升的权限,Visual Studio 可能希望在开始调试时使用管理员权限重新启动。只需允许它重新启动,您的项目将自动加载,您可以开始调试。

单击一次应用程序

注意事项:在清单中设置提升的权限时,单击一次应用程序拒绝编译。要解决此问题,请右键单击应用程序项目并转到"安全"选项卡。 取消选中"使用单击一次应用程序安全性"选项,您就可以开始了。

希望这有帮助