Удалить файл из каталога Windows \ System32 с помощью C # - PullRequest
2 голосов
/ 07 июля 2011

Я занимаюсь разработкой приложения на C #, которому необходимо удалить несколько файлов в System32, и я делаю следующее:

File.Delete(@"c:\windows\system32\<file>");

Это не работает, не выдает исключение, но и не удаляет файл. Я думаю, что это связано с разрешениями, но я не уверен, как это исправить. Вы можете помочь?

Ответы [ 3 ]

2 голосов
/ 07 июля 2011

Хорошо, давайте просто предположим, что вы не делаете что-то злое;) Во всяком случае, не пробовал, но олицетворение поможет.

Google олицетворение c #, и вы увидите множество примеров, и идея почты проста: ваш код обычно выполняется с правами вашего пользователя. С помощью олицетворения вы можете запускать свой код (программно, пользователю ничего не нужно делать) под привилегиями другого пользователя. Таким образом, если пользователь имеет прямой доступ к этой папке без ограничения UAC, то теоретически он должен просто запуститься. Но опять же, я не пробовал, так что не сердитесь, если это не сработает. Просто идея.

1 голос
/ 07 июля 2011

Если вы делаете это на Vista или 7 (или Server 2008+), UAC также помешает вашему удалению. В этом случае вам нужно будет изменить манифест вашего приложения, чтобы он повышал свои разрешения при запуске (или запуска суб-приложения или процесса с повышенными правами):

http://victorhurdugaci.com/using-uac-with-c-part-1/

Кроме того, было бы полезно, если бы вы опубликовали полученное вами исключение, поскольку в нем можно было бы указать, связано ли это с разрешениями, с x64 или с UAC.

0 голосов
/ 07 июля 2011

Вам необходим административный доступ для изменения файлов в этой папке.Используйте app.manifest файл в свойствах, например:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="YourApplication.app" />
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
      <applicationRequestMinimum>
        <defaultAssemblyRequest permissionSetReference="Custom" />
        <PermissionSet ID="Custom" SameSite="site" Unrestricted="true" />
      </applicationRequestMinimum>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- A list of all Windows versions that this application is designed to work with. Windows will automatically select the most compatible environment.-->
      <!-- If your application is designed to work with Windows 7, uncomment the following supportedOS node-->
      <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
    </application>
  </compatibility>
  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
  <!-- <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="789cf14ab782c1eb"
          language="*"
        />
    </dependentAssembly>
  </dependency>-->
</asmv1:assembly>
...