2016-07-08 2 views
1

im пытается удалить конкретный файл в system32, но поскольку там все важные файлы, его очень сложно удалить из него. Единственный способ, которым я могу это сделать, - это если я войду в свойства и изменю разрешения, чтобы у меня был полный контроль над этим файлом, а затем удалил его.C# Удаление файла в папке System32

Я пытаюсь сделать это программно, ive попробовал множество способов изменить права доступа к файлу, но я просто получил ошибку «неавторизованный», даже при увеличении cmd, используя команды, такие как takeown/it does not work, я знаю, если i может сделать это в cmd, я могу сделать это программно, чтобы это сработало.

любая помощь appriciated

+2

Как насчет запуска вашей программы с помощью «Запуск от имени администратора»? –

+0

Добро пожаловать в SO. Пожалуйста, конкретно опишите, что вы сделали до сих пор, и предоставьте свой код, чтобы мы могли вам помочь. – chris579

+0

Вам понадобится ваша программа для запуска в качестве администратора, если вы хотите заставить приложение сделать это: Вы также можете щелкнуть правой кнопкой мыши по exe и запустить от имени администратора. или запустите exe из командной строки с повышенными правами. Если вы хотите просто запустить его в визуальной студии, вы можете открыть визуальные студии в качестве администратора. –

ответ

3

Вы должны поднять разрешения из-за контроля учетных записей. Ниже приведен образец, который проверяет, имеет ли текущий пользователь, выполняющий приложение, повышенные права, если нет, завершает и перезапускает приложение с правами администратора.

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

дает мне ту же ошибку, что и при щелчке правой кнопкой мыши, запускается как администратор, им все еще не разрешено изменять разрешения для файла в sys32 –

+0

Появляется ли всплывающее окно UAC для доступа администратора? –

+0

yep, его определенно работает как admin, im уверен, что это только потому, что файл находится в system32, поэтому у него есть дополнительная защита или что-то –

0

Дальнейшие исследования показали, что существует гораздо лучший способ сделать это. Продолжать;

Создание манифеста приложения

Делая это, вы не должны проверить права администратора в приложение и перезапустить при необходимости. По умолчанию приложение будет запускаться с повышенными учетными данными. Простой Add> New Item> Application Manifest для проецирования и раскомментации следующей строки;

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

Set File Права доступа в Коде и удаление файла

Там должно быть lincense.txt файл в папке System32. Мы можем удалить его со следующим:

 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 может перезагрузить систему с правами администратора при запуске отладки. Просто разрешите перезагрузку, ваш проект будет загружен автоматически, и вы сможете начать отладку.

ПРИМЕЧАНИЕ ДЛЯ ПРИМЕНЕНИЙ КЛИК-ОДНОГО: Когда в манифесте установлены повышенные разрешения, приложения clickonce отказываются компилировать. Чтобы исправить это, щелкните правой кнопкой мыши проект приложения и перейдите на вкладку «Безопасность». Снимите флажок «Использовать защиту от одноразового использования», и вам хорошо идти.

Надеюсь, это поможет

+0

hmm Я попробовал это, и первое ime vs сообщило мне, что перезапускаю с админами правильно, поэтому я сделал и запускал код без ошибок, но файл все еще там, я могу открыть его и т. Д., Поэтому я пытаюсь запустить он снова, но теперь он говорит, что файл не существует, mabye я удалил его, но потом я все еще могу открыть файл и т. д. –

+0

так что я могу удалить документы .txt таким образом, но не любой другой тип файла, конкретно .exe, если я не изменю разрешений вручную –

Смежные вопросы