2017-01-10 13 views
0

Я пытаюсь запустить программное обеспечение, которое устанавливаю с некоторым параметром после установки, для выполнения задачи инициализации. Я хочу запустить пользовательское действие только после первой установки, а не после обновления.Wix запускает установленное программное обеспечение после первой установки, а не после обновления

Следующий код запускает действие custum после первой установки и обновления.

<CustomAction Id="MyAction" 
    Directory="TARGETDIR" 
    ExeCommand="[INSTALL_ROOT]MySoft.exe myarg" 
    Execute="immediate" 
    Return="ignore" 
    Impersonate="yes" /> 
<InstallExecuteSequence> 
    <Custom Action="MyAction" After='InstallFinalize'>(NOT Installed) AND (NOT UPGRADINGPRODUCTCODE) </Custom> 
</InstallExecuteSequence> 

В чем проблема?

ответ

2

Запустите MSI и создайте журнал с msiexec/I [путь к msi]/l * vx [путь к файлу журнала] и посмотрите, когда вызывается свое пользовательское действие и что говорит об этом журнал.

Знаете ли вы, что программа запущена и разбилась, потому что (например, для нее требуется повышенная привилегия? Вы предполагаете, что установка виновата, потому что, по-видимому, вы не видите результат вашей программы, но если она разбилась, как вы знаете? Журнал скажет вам, попытался ли он запустить его, и обратите внимание, что выражение return = ignore означает, что установка выполняется, даже если она терпит неудачу.

Если «после обновления» означает, что это обновление MSI, тогда ваше состояние неверно, потому что UPGRADINGPRODUCTCODE устанавливается, когда вы обновляетесь, а не когда ваш продукт является обновлением. Вам необходимо WIX_UPGRADE_DETECTED в качестве условия, если это настройка обновления.

+0

Thx! WIX_UPGRADE_DETECTED - это то, что мне нужно. И спасибо за подсказку для журнала, очень полезный для отладки. Этот [другой пост] (http://stackoverflow.com/questions/18531272/how-do-i-distinguish-between-a-noormal-install-and-an-upgrade-in-wix) был очень полезен для выявления различные сценарии. – skuallpa