Inno Setup и защита Windows UAC

Я застрял в какой-то проблеме с UAC (я думаю).

У меня вопрос: что означает этот значок UAC Shield в некоторых приложениях? И как мне передать этот значок в мой Inno Setup setup.exe?


person Christian Rockrohr    schedule 24.01.2013    source источник


Ответы (2)


Установщики Inno Setup по умолчанию требуют прав администратора (если они не настроены создателем установщика). Всплывающее окно UAC будет запущено, если пользователь не изменил настройки UAC в Windows.

http://www.jrsoftware.org/ishelp/index.php?topic=setup_privilegesrequired

[Setup]: PrivilegesRequired

Допустимые значения: none, poweruser, admin или lowest

Значение по умолчанию: admin

Описание: действие этой директивы зависит от того, какую версию Windows использует пользователь:

person RobeN    schedule 24.01.2013
comment
Обратите внимание, что это не добавит значок щита, поскольку он повышается во время выполнения. Вы не должны явно запускать установку Inno от имени администратора. - person Deanna; 24.01.2013
comment
@Deanna, почему он повышается во время выполнения? Можете ли вы указать на обоснование такого поведения ?. - person Jaime Hablutzel; 11.09.2016
comment
@JaimeHablutzel во многих случаях каталог установки по умолчанию - Program files, а записи unistall добавляются в HKLM - в обоих случаях требуются права администратора. Вы можете заставить программу установки использовать только права пользователя, но это определяет некоторые ограничения - вы не можете выполнять установку в системные папки (включая PF), и вам нужно использовать ветвь реестра HKCU для всех записей реестра (включая удаление). Такое приложение будет установлено только для одного пользователя. - person RobeN; 11.09.2016
comment
@JaimeHablutzel: Значит, такие функции, как RunAsOriginalUser, работают. Есть часть настройки, которая не повышается, поэтому у нее есть доступ к исходному пользовательскому контексту. После повышения уровня программы не существует надежного способа доступа к исходному контексту, поэтому она оставляет после себя часть себя, с которой она может разговаривать. По этой же причине, когда вы щелкаете правой кнопкой мыши «Запуск от имени администратора», эта функция перестает работать правильно. - person Deanna; 16.09.2016

Как уже говорили другие, Inno Setup по умолчанию требует прав администратора и вызовет запрос UAC. Вы можете изменить это с помощью PrivilegesRequired. Проблема в том, что на исполняемом файле не отображается значок щита.


Лучший способ сделать это - использовать Microsoft Manifest Tool и изменить манифест, встроенный в исполняемый файл. Обычно он входит в состав Microsoft SDK, которые можно бесплатно загрузить с сайта Microsoft. После установки Инструмент манифеста обычно находится в C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\bin\mt.exe. Обратите внимание, что некоторые SDK не включают его. Я также нашел его в https://github.com/eladkarako/mt, если вы этого не сделаете. хотите установить SDK.

  • Чтобы извлечь манифест из исполняемого файла, выполните это в командной строке: "path to mt.exe" -inputresource:"path_filename.exe";#1 -out:"path_filename.exe.manifest"
  • Теперь измените asInvoker на requireAdministrator в path_filename.exe.manifest (файлы манифеста на самом деле являются XML, поэтому вы можете редактировать их с помощью текстового редактора)
  • Чтобы поместить манифест в исполняемый файл: "path to mt.exe" -manifest "path_filename.exe.manifest" -outputresource:"path_filename.exe";1

Вот так! У исполняемого файла теперь есть значок щита, несмотря ни на что!


Есть еще один метод, который гораздо менее полезен. Вы можете изменить исполняемый файл для запуска от имени администратора в реестре (так же, как щелкнуть его правой кнопкой мыши -> Свойства -> Совместимость -> установить флажок Запуск от имени администратора). Для этого создайте строковое значение, имя которого задано как путь + имя файла исполняемого файла и содержит данные / текст RUNASADMIN; значение должно быть создано в:

  • HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers, если вы хотите изменить его для текущего пользователя
  • HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers, если вы хотите изменить его для всех пользователей (обычно для этого требуются права администратора)

Проблема в том, что он не переносится, если вы перемещаете исполняемый файл (вам нужно делать это снова и снова) или отдаете его кому-то другому (они должны это сделать или должны запустить какой-то инструмент для этого) . Это бесполезно.

person Quirinus    schedule 16.05.2018
comment
Обратите внимание, что изменение манифеста делает подпись недействительной. Таким образом, вы не можете заставить Inno Setup подписать установщик. Вам необходимо собрать установщик, добавить манифест и затем подписать установщик самостоятельно. Или вы можете злоупотребить обратным вызовом подписи, чтобы добавить манифест и подписать установщик. Для примера (не с манифестом, а с другими модификациями установщика) см. Microsoft SmartScreen - приостановлено с помощью установщика Inno Setup? - person Martin Prikryl; 16.05.2021