c# 删除 System32 文件夹中的文件
本文关键字:文件 文件夹 删除 System32 | 更新日期: 2023-09-27 17:56:16
im 尝试删除 system32 中的特定文件,但由于这是所有重要文件所在的位置,因此很难从那里删除内容。到目前为止,我能做到这一点的唯一方法是,如果我进入属性并更改权限,以便我可以完全控制该文件,然后将其删除。
我正在尝试以编程方式执行此操作,我尝试了许多更改文件权限的方法,但我只是收到错误"未经授权",即使在使用 takeown/等命令提升的 cmd 中也不起作用,我知道如果我可以在 cmd 中做到这一点,我可以通过编程方式执行此操作,以便也可以工作。
任何帮助都是值得的
由于 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 可能希望在开始调试时使用管理员权限重新启动。只需允许它重新启动,您的项目将自动加载,您可以开始调试。
单击一次应用程序注意事项:在清单中设置提升的权限时,单击一次应用程序拒绝编译。要解决此问题,请右键单击应用程序项目并转到"安全"选项卡。 取消选中"使用单击一次应用程序安全性"选项,您就可以开始了。
希望这有帮助