我想创建一个删除system32中文件的C#程序。程序可以删除正常访问区域(如桌面)中的文件,但在system32中找不到文件,如何让程序访问system32? 这是我的代码:
name
答案 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提示在应用程序启动后立即显示,并导致所有子进程以提升的权限运行,而无需其他提示。
希望这有帮助!