Запустите приложение.NET от имени администратора

С момента выхода Vista & windows 7 некоторые из моих приложений.NET начали генерировать исключения безопасности.

Я заметил, что некоторые приложения (например, мой антивирус, панель управления) имеют небольшой щит, и при запуске этих приложений у меня автоматически запрашиваются привилегии администратора.

Я знаю, что как пользователь я могу настроить приложение на запуск от имени администратора, но этого недостаточно, потому что если приложение будет работать без привилегий, оно будет зависать на компьютерах моих пользователей.

Есть ли способ сообщить Windows (программно), что я хочу, чтобы приложение запускалось с правами администратора?

4 ответа

Решение

Вы должны пометить ваше приложение как требующее прав администратора в манифесте приложения. Вот статья из MSDN Magazine, которая объясняет этот процесс.

Создайте манифест приложения, установите для требуемого значения ExectionLevel значение requireAdminstrator:

Пример (генерируется VS при добавлении манифеста приложения):

<?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="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

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

            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>

Если вы добавите это в проект приложения Visual Studio, он будет встроен в вашу сборку при компиляции.

Вы должны добавить манифест приложения в свое приложение и настроить его для запроса прав администратора. Смотрите здесь: http://www.professionalvisualstudio.com/blog/2007/10/05/enabling-your-application-for-uac-on-vista/

Другое решение для повышения прав пользователя при запуске приложения описано здесь: Pimp my UAC и несколько вопросов об этом

Другие вопросы по тегам