Всплывающее окно с правами администратора в приложении C # - PullRequest
8 голосов
/ 03 ноября 2010

У меня в приложении есть функция, требующая прав администратора.

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

Возможно ли это?

alt text

PS: я знаю о запуске приложения с правами администратора повнесение изменений в файл манифеста.

Также эта функция является частью большой программы и не может быть перенесена в отдельную программу.

Ответы [ 2 ]

5 голосов
/ 03 ноября 2010

Вы можете получить значок с помощью StockIcons.Shield из Windows API Code Pack

Вы можете запустить программу с правами администратора, не изменяя манифест программы, используя глагол "runas" (вы также можете использовать это для перезапуска вашей программы с правами администратора):

Process.Start(new ProcessStartInfo()
   {
        Verb = "runas",
        FileName = "Notepad.exe",
   });

Существует COM API, который позволяет вам создавать COM-объект с правами администратора внутри процесса без прав администратора, но я считаю,очень трудно использовать это из приложения .net.

4 голосов
/ 03 ноября 2010

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

Например:

MyProgram.exe - без манифеста
MyProgramElevated.exe- имеет манифест, который указывает, что ему требуются права администратора

Когда MyProgram.exe необходимо выполнить действие с повышенными правами, он выполняет MyProgramElevated.exe, передавая параметры командной строки, указывающие, какая задача с повышенными правами требуется.

...