Як запитувати дозволи адміністратора під час запуску програми?


81

Мені потрібно, щоб моє програмне забезпечення могло запускатись як адміністратор у Windows Vista (якщо хтось запускає його без адміністративних дозволів, воно вийде з ладу).

Під час запуску іншого програмного забезпечення я бачив підказку системи на зразок "це програмне забезпечення працюватиме як адміністратор. Ви хочете продовжити?" коли програма намагалася отримати адміністративні привілеї.

Як запросити адміністративні привілеї під час запуску програми c # у Windows Vista?


6
Будь ласка, не забувайте, що це лише приховує основну проблему, а не усуває її. Навіть якщо вашій програмі дійсно потрібні дозволи адміністратора, вона не повинна виходити з ладу, якщо не отримує їх. Найімовірнішою причиною є те, що ви не можете перевірити наявність помилки після системного дзвінка.
Harry Johnston

Відповіді:


143

Додайте у свій файл маніфесту таке:

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

Ви також можете використовувати highestAvailableдля рівня.

Подивіться тут про вбудовування файлів маніфесту:

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

PS: Якщо у вас немає файлу маніфесту, ви можете легко додати новий:

У Visual Studio клацніть проект правою кнопкою миші -> Додати елемент -> Виберіть файл маніфесту програми (у розділі Загальне для елементів Visual C #)

Доданий файл вже матиме вищезазначену частину, просто змініть рівень на requireAdministratorзasInvoker


2
Варто згадати, що якщо ви додаєте файл маніфесту програми у VS таким чином, ви отримуєте там шаблон із безліччю інших опцій (наприклад, кажучи, що ваш додаток працює лише в Windows 10 і новіших версіях.) Перевірено на VS2017.
Per Lundberg

@PerLundberg - Не варто згадувати, тому що оригінальний запитувач про це не запитував - Він запитував про дозволи адміністратора
Моморо,

3
@Momoro Питання щодо SO - це не тільки для ОП, це для більшої користі для громади. Інші люди можуть знайти це питання під час пошуку інших рішень, не тільки саме того, про що запитував ОП. І взагалі, не завадить вчити людей про те, що "ви можете робити це за допомогою маніфестів заявок".
Per Lundberg

Я не мав на увазі нічого грубого (вибачте, якщо натрапив на цей шлях), я просто читав старі відповіді / запитання і
трохи

14

Помістіть цей 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

Для F # Visual Studio 2013, включаючи файл маніфесту, який вимагає підвищення адміністратора з використанням прапора компілятора FSharp, /win32manifestяк це працює, працював у мене. Отже, з урахуванням результатів проекту з назвою "App.Exe"

  1. Створіть файл із таким вмістом (для зручності ви можете додати файл до проекту. Переконайтеся, що він Build Actionє None' andКопіювати у вихідні дані ... 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.