Как запросить права администратора при запуске программы? - PullRequest
69 голосов
/ 05 октября 2011

Мне нужно, чтобы мое программное обеспечение работало в качестве администратора в Windows Vista (если кто-то запускает его без административных разрешений, оно рухнет).

При запуске другого программного обеспечения система видела запрос типа «это программное обеспечение будет работать от имени администратора. Продолжить?»когда приложение пыталось получить права администратора.

Как запросить права администратора при запуске приложения c # в Windows Vista?

Ответы [ 4 ]

122 голосов
/ 05 октября 2011

Добавьте следующее в ваш файл манифеста:

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

Вы также можете использовать highestAvailable для уровня.

Посмотрите здесь о встраивании файлов манифеста:

http://msdn.microsoft.com/en-us/library/bb756929.aspx

PS: если у вас нет файла манифеста, вы можете легко добавить новый:

В Visual Studio щелкните правой кнопкой мыши проект -> Добавить элемент -> Выберите файл манифеста приложения (в разделе Общие для элементов Visual C #)

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

12 голосов
/ 05 октября 2011

Поместите этот XML в файл с именем yourexename.exe.manifest:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
   <security>
     <requestedPrivileges>
        <requestedExecutionLevel level="highestAvailable" />
     </requestedPrivileges>
   </security>
</trustInfo>
</assembly>
1 голос
/ 05 октября 2011

Вам необходимо использовать токен requestedExecutionLevel в манифесте:

http://www.developerfusion.com/code/7987/making-a-net-app-run-on-vista-with-administrator-priviledges/

0 голосов
/ 05 октября 2015

Для F # Visual Studio 2013, включая файл манифеста, который запрашивает повышение прав администратора с помощью флага /win32manifest компилятора FSharp, как показано ниже, работал для меня. Итак, с учетом выходных данных проекта с именем «App.Exe»

  1. Создайте файл со следующим содержанием (для удобства вы можете добавить файл в проект. Убедитесь, что это Build Action is None' and Copy to Output ... is Не копировать . By convention such a file is named App.Exe.manifest`. Если вам требуется uiAccess (пользовательский интерфейс), сборка должна быть строго названа.

    <?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="App" />
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
          </requestedPrivileges>
        </security>
      </trustInfo>
    </asmv1:assembly>
    
  2. Измените поле ввода Other flags: панели построения диалога проекта, включив в него следующее: /win32manifest:<ApplicationManifestFile>. Например, в этом случае /win32manifest:App.Exe.manifest.

...