Как я могу получить код возврата из CustomAction?

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

<CustomAction Id="InstallDriver"
                  Return="check"
                  Execute="deferred"
                  Impersonate="no"
                  FileKey="FileDriverInst"
                  ExeCommand="-install" />

<InstallExecuteSequence>
    <Custom Action="InstallDriver" Before="InstallServices" />
</InstallExecuteSequence>

Программа, устанавливающая драйвер, выдает полезные коды возврата, например, если установка завершилась неудачно из-за необходимости перезагрузки системы после удаления предыдущего драйвера.

В настоящее время, если возвращается что-либо, кроме успеха, я получаю диалоговое окно с сообщением «Программа, запущенная как часть установки, не завершилась должным образом». и установка не проходит. Это не оптимально.

Как я могу получить и обработать коды возврата?


person fredley    schedule 19.04.2012    source источник
comment
Весь ваш дизайн не оптимален. Это не относится к установщику Windows и не является декларативным. Есть лучшие шаблоны для установки драйверов.   -  person Christopher Painter    schedule 19.04.2012
comment
@ChristopherPainter Установщик этого пакета на основе Wix должен использовать те же инструменты, что и другие наши механизмы установки, боюсь, я не имею права голоса.   -  person fredley    schedule 19.04.2012
comment
Тогда я ничего не могу для тебя сделать. Это просто то, как MSI обрабатывает вызовы EXE. Вам придется написать свои собственные настраиваемые действия для переноса вызова EXE, а затем интерпретировать причину сбоя. Для меня это просто добавляет еще одну точку отказа.   -  person Christopher Painter    schedule 19.04.2012
comment
@ChristopherPainter, это следует опубликовать как ответ.   -  person Ed Bayiates    schedule 19.04.2014


Ответы (3)


Установщик Windows не поддерживает обработку возвращаемых значений настраиваемых действий.

Для пользовательского действия EXE ненулевое возвращаемое значение интерпретируется как ошибка, и установка останавливается. Только настраиваемое действие Win32 DLL или VBScript может изменить поведение установки с помощью код возврата, но он по-прежнему очень ограничен.

Если вы хотите перезагрузить компьютер после установки, вы можете установить REBOOT.

person cosmin    schedule 20.04.2012

Добавлено как «ответ» по запросу:

Весь ваш дизайн не оптимален. Это не относится к установщику Windows и не является декларативным. Есть лучшие шаблоны для установки драйверов.

Это просто то, как MSI обрабатывает вызовы EXE. Вам придется написать свои собственные настраиваемые действия для переноса вызова EXE, а затем интерпретировать причину сбоя. Для меня это просто добавляет еще одну точку отказа.

person Christopher Painter    schedule 18.04.2014

Вы не можете получить код возврата из CustomAction, но обходным путем вы можете установить, каким будет этот код возврата для свойства. Это может быть то же самое, что и получение кода возврата.

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

Например, если у вас есть свойство типа

<Property="MyCode" Secure="yes">

Затем в VBScript (или Jscript) вы можете получить значение этого свойства следующим образом:

VBScript

Session.Property("MyCode")

Изначально он нулевой. Вы можете установить его в VBScript следующим образом:

If someCondition = 4 Then
  Session.Property("MyCode") = "4" // For a return code of 4
End If

Вернувшись в файл WiX .wxs, если вы посмотрите на значение вашего свойства, оно теперь равно 4. Вы даже можете использовать его в тегах CDATA.

Например, порождайте диалог только в том случае, если MyCode равен 4.

<Publish Dialog="SpawnDialog" ...><![CDATA[ MyCode = 4 ]]></Publish>
person Holly Harb    schedule 19.11.2015