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

时间:2016-07-08 22:47:39

标签: c#

我试图删除system32中的特定文件,但就像所有重要文件一样,很难从那里删除东西。到目前为止我能做到的唯一方法是,如果我进入属性并更改权限,以便我可以完全控制该文件,然后将其删除。

我正在尝试以编程方式执行此操作,我尝试了多种方法来更改文件的权限,但我只是得到错误“未经授权”,即使在使用像takeown /它不起作用的命令的高架cmd,我知道我是否可以在cmd中执行此操作,我可以通过编程方式执行此操作也可以。

任何帮助都是适当的

2 个答案:

答案 0 :(得分:4)

您应该提升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");

答案 1 :(得分:0)

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

创建应用程序清单

通过执行此操作,您无需在应用程序中检查管理员权限,并在需要时重新启动。默认情况下,应用程序将使用提升的凭据启动。简单添加>新商品> Application Manifest用于投影和取消注释以下行;

<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");

注意:一旦设置了application.manifest并要求提升权限,Visual Studio可能希望在开始调试时以管理员权限重新启动。只需让它重新启动,您的项目就会自动加载,您就可以开始调试了。

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

希望这有帮助