2012-10-22 1 views
3

J'ai une installation de WiX Burn avec une chaîne de paquets.WiX CAQuietExec CustomAction arrête l'installation

Les mises à jour sont exécutées en mode/passif sans intervention de l'utilisateur.

Le dernier lot est exécuté uniquement sur une mise à jour, et le seul but est de lancer un exécutable, qu'il n'utilisant le code suivant ..

<!-- Quiet Execution Deferred execution with qtExec--> 
<Property Id="QtExecDeferredExample" Value="&quot;C:\Program Files (x86)\Acme Inc\MyApp.exe&quot;"/> 
<CustomAction Id="QtExecDeferredExample" BinaryKey="WixCA" DllEntry="CAQuietExec" 
       Execute="deferred" Return="ignore" Impersonate="no"/> 

<InstallExecuteSequence> 
    <Custom Action="QtExecDeferredExample" Before="InstallFinalize"/> 
</InstallExecuteSequence> 

Cependant, bien que commence MyApp.exe, l'installation ne se termine pas jusqu'à la fermeture de MyApp.exe. Évidemment, je veux que l'application démarre et que le programme d'installation se termine.

Je ne peux pas modifier le CustomAction pour exécuter après l'installation .. finalise

<Custom Action="QtExecDeferredExample" After="InstallFinalize"/> 

En raison des éléments suivants:

ICE77: QtExecDeferredExample is a in-script custom action. 
It must be sequenced in between the InstallInitialize action and the InstallFinalize action in the InstallExecuteSequence table 

Toutes les idées appréciées.

Mise à jour: La réponse de BrianJ m'amène à la réponse. Comme @escist a demandé, la partie pertinente de mon CA est la suivante:

<!-- CA To set the property of the process to start--> 
    <CustomAction 
       Id  ="SetProcessToStart" 
       BinaryKey ="WiXCustomActions" 
       DllEntry ="GetProcessToStart" 
       Execute ="immediate" /> 

    <!-- CA to start the process--> 
    <CustomAction 
       Id   ="StartApp" 
       Directory ="APPLICATIONROOTDIRECTORY" 
       ExeCommand ="[PROCESSTOSTART]" 
       Execute ="deferred" 
       Return  ="asyncNoWait"/> 

    </Fragment> 
</Wix> 

et ailleurs (il y a un certain nombre de mes applications qui auraient pu commencer ce processus, de sorte que le chemin vers qui est stocké dans le registre) ..

<Property Id="PROCESSTOSTART">[Not Set]</Property> 
<InstallExecuteSequence> 
    <!-- Use our Custom Action to set the PROCESSTOSTART property--> 
    <!-- Custom Action to get the value from registry of the App that started the bootstrapper--> 
    <Custom Action="SetProcessToStart" Before="LaunchConditions">NOT Installed</Custom> 

    <!-- NOT installed ensures that the CA does not get fired on an uninstall --> 
    <Custom Action="StartApp" Before="InstallFinalize">NOT Installed</Custom> 
</InstallExecuteSequence> 
+0

Pourriez-vous trouver une solution à ce problème? – escist

Répondre

1

Modifiez la valeur de "retour" dans votre action personnalisée à Return="asyncNoWait".

+0

Cela provoque une erreur de compilation comme 'La valeur de l'attribut CustomAction/@ Return, 'asyncNoWait', ne peut pas être spécifiée sans l'attribut ExeCommand présent. ' – escist

+0

Un peu tard pour marquer cela comme la réponse, alors excuses. @escist - mettra à jour ma question initiale avec mon action personnalisée de travail. –

Questions connexes