Как добавить "требует повышенных прав" в существующий файл EXE? (Или я могу установить его при запуске IExpress?)
У нас есть установщик для нашего приложения. (Программа на C++, созданная в VisualStudio 2012.) Установщик теперь подписан и требует повышенных привилегий - пользователь получает аккуратный вопрос UAC.
Однако для некоторых клиентов установщику нужно много других файлов. Мы используем IExpress для создания самораспаковывающегося архива. Пользователь запускает самораспаковывающийся EXE-файл, файлы распаковываются и запускается наш установщик.
Но это не работает после того, как мы добавили поддержку UAC. EXE-файл, созданный IExpress, не запускает программу, требующую повышенных привилегий.
Простым решением было бы то, что EXE-файл, созданный IExpress, также требует повышенных привилегий. Но я не нашел флаг для IExpress, который делает это. (Или я что-то пропустил?)
Есть ли простой способ добавить "требовать повышенные привилегии" в существующий файл EXE?
3 ответа
Довольно простой способ сделать это, кажется, через cmd.exe
, Просто измените вашу программу установки, например:
setup.exe
в
cmd /c setup.exe
Тогда "магическое обнаружение UAC" IExpress не произойдет, и пользователь получит стандартное приглашение UAC при запуске вашей программы.
Если вы хотите узнать больше...
Новые версии IExpress включают в себя манифест, который намеренно не запрашивает повышение UAC для самого пакета, сгенерированного IExpress. Вот как это выглядит в wextract.exe
(та часть, которая фактически включена в ваш сгенерированный пакет):
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
Согласно MSDN, asInvoker
Уровень означает: приложение будет работать с теми же разрешениями, что и процесс, который его запустил.
По-видимому, есть некоторые программы, которые могут изменить манифест в последствии. Один из них называется ResEdit, хотя я рекомендую вам скачать его с SoftPedia, так как на сайте.net теперь есть какое-то рекламное ПО. Мне не повезло с этим (я думаю, потому что у меня не было установленной Visual Studio), но, возможно, это будет работать для вас.
Если вы решили пойти по этому пути, попробуйте изменить level
в requireAdministrator
,
Вы можете попробовать это в команде после установки мастера iexpress: -
PowerShell -windowstyle hidden -command "Start-Process -Wait setup.exe -Verb Runas"
-windowstyle hidden скрывает окно PowerShell.
-Wait ждет завершения setup.exe перед удалением временных файлов (где файлы iexpress извлекаются по умолчанию)
-Глагол Runas Просьбы о возвышении.
Если вы щелкните правой кнопкой мыши исполняемый файл установщика, перейдите к
Properties
и нажмите
Compatibility
затем установите флажок под названием
Run this program as a administrator
и нажмите
OK
он должен работать.