我试图删除system32中的特定文件,但就像所有重要文件一样,很难从那里删除东西。到目前为止我能做到的唯一方法是,如果我进入属性并更改权限,以便我可以完全控制该文件,然后将其删除。
我正在尝试以编程方式执行此操作,我尝试了多种方法来更改文件的权限,但我只是得到错误“未经授权”,即使在使用像takeown /它不起作用的命令的高架cmd,我知道我是否可以在cmd中执行此操作,我可以通过编程方式执行此操作也可以。
任何帮助都是适当的
答案 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应用程序安全性”选项,您就可以开始使用了。
希望这有帮助