如何让我的程序访问System32中的文件?

时间:2017-08-08 23:32:52

标签: c#

我想创建一个删除system32中文件的C#程序。程序可以删除正常访问区域(如桌面)中的文件,但在system32中找不到文件,如何让程序访问system32? 这是我的代码:

name

1 个答案:

答案 0 :(得分:1)

首先,您不应该从系统32文件夹中删除文件,这些文件通常属于操作系统,不应该进行调整。
无论如何 !我不会问为什么你有这个要求,但Windows用户帐户控制(UAC)将不允许你执行此操作,你将需要提升权限并取得文件的所有权,如下所示:

    //take ownership of the file, code assumes file you want to delete is toBeDeleted.txt
    ProcessStartInfo processInfo = new ProcessStartInfo("cmd.exe", @"/k takeown /f C:\Windows\System32\toBeDeleted.txt && icacls C:\Windows\System32\toBeDeleted.txt /grant %username%:F");
    processInfo.UseShellExecute = true;
    processInfo.Verb = "runas";
    processInfo.FileName = fileName;//path of your executable
    try
    {
        Process.Start(processInfo);
        // a prompt will be presented to user continue with deletion action
        // you may want to have some other checks before deletion
        File.Delete(@"C:\Windows\System32\toBeDeleted.txt");
        return true;
    }
    catch (Win32Exception)
    {
        //Do nothing as user cancelled UAC window.
    }  

当您运行此操作时,系统会向用户显示一个提示以确认此操作,如果您想避免这种情况,则需要Creating and Embedding an Application Manifest (UAC)使用提升的权限运行整个主机进程,以要求& #39; highestAvailable'执行级别:这将导致UAC提示在应用程序启动后立即显示,并导致所有子进程以提升的权限运行,而无需其他提示。

希望这有帮助!