Я пишу файл WXS для пакета, который я хочу установить. Для простоты, скажем, я хочу установить 1 файл, а затем хочу выполнить команду для него (в моем случае это открытый ключ GPG, и я хочу импортировать его после завершения установки). Вот соответствующие части моего файла WXS:
<CustomAction Id="ImportKey" Directory="INSTALLDIR"
ExeCommand="[SystemFolder]cmd.exe /C gpg --import keyfile.key"
Return="check" />
<!-- Install file keyfile.key into C:\GnuPG -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="INSTALLDIR" Name="GnuPG">
<Component Id="GnuPGConfiguration" Guid="E9469F1C-A875-1014-A3B3-DEF3264B13C4">
<File Name="keyfile.key" Id="KeyfileKey" />
</Component>
</Directory>
</Directory>
<Feature Id="GnuPGConfiguration" Level="1" Title="GnuPG Configuration">
<ComponentRef Id="GnuPGConfiguration" />
</Feature>
<!-- Run custom action after files are installed -->
<InstallExecuteSequence>
<Custom Action="ImportKey" After="InstallFiles">NOT Installed AND NOT PATCH</Custom>
</InstallExecuteSequence>
Я могу успешно построить MSI. При установке я использую msiexec и включаю ведение журнала. Там говорится, что при пользовательском действии происходит сбой установки, и в журнале находится правильная команда. Запуск его вручную работает. Если я закомментирую выполнение команды, файл будет установлен в правильном месте (C: \ GnuPG \ keyfile.key существует после установки).
Вместо запуска команды GPG, я попытался запустить dir ant, перенаправив вывод в файл. Просматривая его, я вижу, что keyfile.key отсутствует среди файлов в C: \ GnuPG. Похоже, что команда запускается до установки файла.
Есть идеи, что я делаю не так?