Как добавить "требует повышенных прав" в существующий файл 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он должен работать.

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