#c# #windows #windows-7 #windows-vista
#c# #Windows #windows-7 #windows-vista
Вопрос:
Мне нужно, чтобы мое программное обеспечение могло запускаться от имени администратора в Windows Vista (если кто-то запустит его без прав администратора, произойдет сбой).
При запуске другого программного обеспечения я видел запрос системы типа «это программное обеспечение будет запускаться от имени администратора. вы хотите продолжить?», когда приложение пыталось получить права администратора.
Как мне запросить права администратора при запуске приложения на c # в Windows Vista?
Комментарии:
1. Пожалуйста, не забывайте, что это только скрывает основную проблему, но не устраняет ее. Даже если вашей программе действительно нужны разрешения администратора, она не должна аварийно завершать работу, если она их не получает. Наиболее вероятной причиной является то, что вы не можете проверить состояние ошибки после системного вызова.
Ответ №1:
Добавьте следующее в свой файл манифеста:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
Вы также можете использовать highestAvailable
для уровня.
Посмотрите здесь о внедрении файлов манифеста:
http://msdn.microsoft.com/en-us/library/bb756929.aspx
PS: Если у вас нет файла манифеста, вы можете легко добавить новый:
В Visual Studio щелкните правой кнопкой мыши проект -> Добавить элемент -> Выберите Файл манифеста приложения (в разделе Общие для элементов Visual C #)
Добавленный файл уже будет иметь вышеуказанную часть, просто измените уровень на requireAdministrator
from asInvoker
Комментарии:
1. Стоит упомянуть, что если вы добавите файл манифеста приложения в VS таким образом, вы получите там шаблон со многими другими параметрами (например, сообщая, что ваше приложение работает только в Windows 10 и выше).) Протестировано на VS2017.
2. @PerLundberg — Не стоит упоминать, потому что первоначальный вопрос не спрашивал об этом — он спрашивал о разрешениях администратора
3. @Momoro Вопросы по SO предназначены не только для OP, но и для большей пользы сообщества. Другие люди могут найти этот вопрос при поиске других решений, а не только того , о чем спрашивал OP. И вообще, не помешает научить людей тому, что «вы можете делать эти вещи с помощью манифестов приложений».
4. Я не подразумевал ничего грубого (извините, если я столкнулся с этим) Я просто читал старые ответы / вопросы и немного запутался: D
Ответ №2:
Поместите этот 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>
Ответ №3:
Вам нужно использовать requestedExecutionLevel
токен в манифесте:
Ответ №4:
Для .Net
( Visual Studio 2013
) включите файл манифеста, который запрашивает права администратора, и, используя флаг компилятора /win32manifest
, создайте и предоставьте файл манифеста, который запрашивает это право. Однако ниже описано, как это сделать в Visual Studio для имени проекта, App.Exe
:
-
Создайте файл со следующим содержимым (для удобства вы можете добавить файл в проект Visual Studio в качестве ресурса разработки, убедившись, что он
Build Action
естьNone
иCopy to Output...
естьDo not copy
. В этом случае файлы манифеста по соглашению называются в честь их цели вывода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>
-
Отредактируйте поле ввода панели сборки диалогового окна проекта
Other flags:
, чтобы добавитьwin32manifest
флаг, и попросите Visual Studio соответствующим образом вызвать компилятор. Например, в этом случае,/win32manifest:App.Exe.manifest
.
Обратите внимание на следующую запись:
<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>
Комментарии:
1. OP запросил C #.