9
votes

Comment puis-je obtenir le code de retour d'une personnalisation?

J'ai la personnalisation suivante dans mon projet:

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

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


4 commentaires

Toute votre conception n'est pas optimale. Il est hors de processus vers Windows Installer et n'est pas déclaratif. Il existe de meilleurs modèles d'installation de pilotes.


@ChristoThalerPainter L'installateur basé sur WIX pour ce paquet doit utiliser les mêmes outils que nos autres mécanismes d'installation, j'ai peur de ne pas avoir à dire.


Ensuite, il n'y a rien que je puisse faire pour vous. C'est simplement la façon dont Msi gère les appels exe. Vous devez écrire vos propres actions personnalisées pour envelopper l'appel EXE, puis interpréter la raison de défaillance. Pour moi, cela ajoute juste un autre point d'échec.


@Christopherpainter, qui devrait être affiché comme une réponse.


3 Réponses :


5
votes

Windows Installer ne prend pas en charge la gestion des valeurs de retour d'action personnalisées.

Pour une action personnalisée Exe Une valeur de retour non nulle est interprétée comme une erreur et l'installation s'arrête. Seule une action personnalisée Win32 DLL ou VBScript peut modifier le comportement d'installation via son Code de retour , mais il est toujours très limité.

Si vous souhaitez redémarrer la machine après l'installation, vous pouvez définir le Reboot Propriété.


0 commentaires

3
votes

ajouté comme une "réponse" par demande:

Votre conception entière n'est pas optimale. Il est hors de processus vers Windows Installer et n'est pas déclaratif. Il existe de meilleurs modèles d'installation de pilotes.

C'est simplement la façon dont MSI gère les appels exe. Vous devez écrire vos propres actions personnalisées pour envelopper l'appel EXE, puis interpréter la raison de défaillance. Pour moi, cela ajoute simplement un autre point d'échec.


0 commentaires

2
votes

Vous ne pouvez pas obtenir de code de retour d'une personnalisation, mais dans un tour de façon, vous pouvez définir ce que ce code de retour serait sur une propriété. Cela pourrait aussi bien être la même chose que d'obtenir le code de retour.

Vous devez l'obtenir dans le script / DLL Votre action personnalisée est effectuée. Sinon, le code de retour ne figure que dans le journal. P>

Par exemple, si vous avez des biens comme p> xxx pré>

alors dans VBScript (ou JScript) vous Peut obtenir la valeur de cette propriété comme celle-ci: p>

VBScript strong> p> xxx pré> p> initialement, il est null. Vous pouvez la définir dans VBScript comme ceci: p> xxx pré>

une fois de retour dans votre fichier Wix .wxs, si vous regardez la valeur de votre propriété, il est maintenant 4. Vous pouvez maintenant Même l'utiliser dans des balises CDATA. P>

Par exemple, seunes apparaissent une boîte de dialogue si MyCode est égale à 4. P>

<Publish Dialog="SpawnDialog" ...><![CDATA[ MyCode = 4 ]]></Publish>


0 commentaires