Установите переменную среды перед запуском настраиваемого действия в WiX - PullRequest
4 голосов
/ 23 декабря 2010

Мне нужно создать установщик на основе MSI , используя WiX , и мне нужно установить среду MY_HOME перед выполнением командного действия.

У меня есть компонент:

<Component Id="SEMYHOME"
           Guid="*my guid*">
    <CreateFolder />
    <Environment Id="MY_HOME"
                 Action="set"
                 Part="all"
                 Name="MY_HOME"
                 Permanent="no"
                 System="yes"
                 Value="[APPLICATIONPATH]myapp"/>
</Component>

Тогда у меня есть настраиваемое действие:

<CustomAction Id="InstallMyService"
              Directory="INSTALLDIR"
              ExeCommand='&quot;[INSTALLDIR]myapp\install_service.bat&quot; install'
              Execute="immediate"
              Return="ignore"/>
<InstallExecuteSequence>
    <Custom Action="InstallMyService"
            After="InstallFinalize"/>
</InstallExecuteSequence>

ПРИМЕЧАНИЕ. Для этого действия необходимо установить переменную MY_HOME перед запуском.

При установке этого MSI я получил журнал, показывающий, что переменная MY_HOME установлена ​​перед выполнением настраиваемого действия «InstallMyService», но команда для установки моей службы по-прежнему не выполняется. Я обнаружил, что причина в том, что при вызове команды MY_HOME все еще не установлен.

После завершения установки MY_HOME был установлен, как и ожидалось, но пользовательское действие завершилось неудачно: (

Как я могу решить эту проблему?

Ответы [ 2 ]

6 голосов
/ 23 декабря 2010

Установщик Windows и пользовательские действия размещаются с помощью диспетчера управления службами, который имеет долгую историю несоблюдения широковещательных сообщений, отправляемых с объявлением об изменениях среды. Поэтому, даже если вы исправите проблему немедленного / отложенного действия, о которой упоминает Ян, вы обнаружите, что в вашем настраиваемом действии все еще нет переменной окружения.

Почему бы просто не передать "[APPLICATIONPATH] myapp" в ваш файл .bat и извлечь его как% 2?

Кстати, я также не рекомендую вызывать пакетные файлы из установщика. Хрупко и неловко видеть установки, которые запускаются с маленькими черными окнами.

2 голосов
/ 23 декабря 2010

Вы CA немедленно.Это означает, что он запускается сразу, когда установщик Windows обрабатывает ваш пакет MSI.И это, очевидно, происходит до установки компонента, содержащего <Environment/>.Измените его так, чтобы оно было отложено (Execute="deferred") и запланировано до InstallFinalize.

...