Выполнение пользовательского действия, которое требует повышения после установки

У меня есть следующий отрывок WiX:

<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />
<CustomAction Id="StartAppOnExit" 
              FileKey="Configurator.exe" 
              ExeCommand="" 
              Execute="immediate" 
              Impersonate="yes" 
              Return="asyncNoWait" />
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" 
          Value="Configure initial settings" />
<UI>
  <Publish Dialog="ExitDialog" 
           Control="Finish" 
           Order="1" 
           Event="DoAction" 
           Value="StartAppOnExit"
  >WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
</UI>

В основном на диалоговом окне выхода я отображаю поле, которое говорит: запустите приложение.Примечание: это приложение требует повышения. Это все хорошо работает за исключением препятствия. Если контролю учётных записей включают, кажется, что MSI слоняется без дела с пользовательским маркером и разделяет свои группы, поэтому когда это пытается запустить приложение, которое требует повышения, это больше не опция.

Как я представляю это в виде строки вместе для работы?

Я пытался зажать Явление олицетворением = "нет", но слишком поздно в той точке для этого для работы.

6
задан Peter Mortensen 18 June 2013 в 20:15
поделиться

2 ответа

Последовательность пользовательского интерфейса работает от имени ограниченного пользователя и запускает приложения с вызовом CreateProcess. Если вместо этого вы используете что-то вроде WixShellExec с [WixShellExecTarget], он будет действовать как Explorer и показывать приглашение UAC, если цель требует повышения прав. Или вы можете изменить файл Configurator.exe, чтобы разрешить запуск без повышенных привилегий, обнаружить этот случай и перезапустить себя с повышенными привилегиями.

Например, это должно сработать:

<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1" />
<CustomAction Id="StartAppOnExit" BinaryKey="WixCA" DllEntry="WixShellExec" Execute="immediate" Return="check" Impersonate="yes"/>
<Property Id="WixShellExecTarget" Value="[#Configurator.exe]"/>
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Configure initial settings" />
<UI>
  <Publish Dialog="ExitDialog" Control="Finish" Order="1" Event="DoAction" Value="StartAppOnExit">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed</Publish>
</UI>
12
ответ дан 9 December 2019 в 20:42
поделиться

К вашему сведению, немедленные настраиваемые действия ВСЕГДА олицетворяются (т.е. они всегда выполняются от имени пользователя, который выполняет MSI).

Мне нравится идея Майкла Урмана относительно того, чтобы ваш Configurator.exe обрабатывал проблему повышения прав.

Интересно, могли бы вы также просто включить манифест в свой EXE-файл, чтобы ОС знала, что повышение прав всегда требуется.

0
ответ дан 9 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: