Lors de l'installation, j'ajoute une clé de configuration à une base de données à l'aide d'un outil de ligne de commande. Lors de la désinstallation, j'essaie maintenant de supprimer cette clé de configuration. Lors d'une mise à niveau, je dois supprimer puis ajouter la clé de configuration.WiX Toolset - CustomAction pour la désinstallation exécutée après RemoveFiles
Voici mon CustomAction "expurgée" Code:
<CustomAction Id="Unset_AppName_Version_Cmd"
Property="Unset_AppName_Version"
Execute="immediate"
Value=""[SystemFolder]cmd.exe" /C ""[SOMEDIR]SomeClTool" "uninstall:appname""" />
<CustomAction Id="Unset_AppName_Version"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="immediate"
Return="check"
Impersonate="yes" />
Note: J'ai essayé plusieurs valeurs pour exécuter, y compris oncePerProcess, firstSequence et immédiat.
Voici mon InstallExecuteSequence code "expurgée":
<Custom Action="Unset_AppName_Version_Cmd" Sequence="1215">
(!AppName = 3 AND (&AppName = 3 OR &AppName = 2))
</Custom>
<Custom Action="Unset_AppName_Version" Sequence="1216">
(!AppName = 3 AND (&AppName = 3 OR &AppName = 2))
</Custom>
Note: Encore une fois, j'ai essayé de déplacer la séquence utilisée. Dans l'exemple ci-dessus avant InstallValidate, mais aussi avant RemoveFiles, RemoveODBC, etc
Rien n'a fonctionné pour moi. Dans tous les cas, la
Executing op: ActionStart(Name=Unset_AppName_Version,,)
ligne est en cours d'exécution après RemoveFiles, donc mon action personnalisée échoue avec:
CAQuietExec: The system cannot find the path specified.
CAQuietExec: Error 0x80070001: Command line returned an error.
CAQuietExec: Error 0x80070001: CAQuietExec Failed
Après cela, mon installation est annulée pour.
De plus, cette condition est-elle correcte pour être exécutée lors de la désinstallation ou de la réinstallation?
(!AppName = 3 AND (&AppName = 3 OR &AppName = 2))
Merci
Mise à jour 7/31/2015
Bien que je ne comprends toujours pas une solution de travail, je l'ai fait assez de changements qu'il est logique de poster mon code actuel.
Voici mon CustomAction mis à jour le code « expurgée »:
<CustomAction Id="Unset_AppName_Version_Cmd"
Property="QtExecCmdLine"
Value=""[SystemFolder]cmd.exe" /C ""[SOMEDIR]SomeClTool" "uninstall:appname"""
Execute="immediate" />
<CustomAction Id="Unset_AppName_Version"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="immediate"
Return="ignore" />
Note: Ces modifications ont été apportées en fonction des suggestions beaucoup appréciées de Kiran et d'imiter certaines commandes Taskkill qui travaillent pour moi.
Exemple de code de travail:
<CustomAction Id="TaskKill_erl_exe_Cmd"
Property="QtExecCmdLine"
Value='"[SystemFolder]taskkill.exe" /F /IM erl.exe /T'
Execute="immediate" />
<CustomAction Id="TaskKill_erl_exe"
BinaryKey="WixCA"
DllEntry="CAQuietExec"
Execute="immediate"
Return="ignore"/>
Merci
Merci. J'avais déjà passé à Property = "QtExecCmdLine", ce qui semble fonctionner. WixQuietExecCmdLine est-il un meilleur choix? J'ai essayé le séquençage avant RemoveFiles (je cherche seulement à exécuter ceci sur la désinstallation ou sur la partie de désinstallation d'un MajorUpgrade). J'ai même placé les actions personnalisées dans la gamme de séquences 1200+ sans condition. Il s'exécute dans la séquence sélectionnée, mais réessaie après RemoveFiles, ce qui provoque un échec et un retour en arrière. J'ai essayé une foisPerProcess et firstSequence pour essayer de ne l'exécuter qu'une seule fois, mais rien ne semble empêcher WiX d'exécuter après RemoveFiles. – sleon
Inspectez votre msi construit en utilisant Orca. Orca fait partie du programme d'installation de Windows SDK. Inspectez la table InstallExecuteSequence et vérifiez les numéros de séquence affectés à votre action personnalisée, ainsi que RemoveFiles. Si c'est l'exécution après RemoveFiles, alors il est séquencé plus tard. Les numéros de séquence sont vraiment relatifs et ils peuvent changer en fonction du nombre d'actions personnalisées présentes. Le bon moyen est d'inspecter le paquetage msi en utilisant Orca. En outre, avez-vous inspecté à l'aide de Process Monitor pour voir si la commande correcte a été invoquée? –
Merci encore Kiran. J'ai vérifié Orca et les choses allaient bien, les séquences 1211 ... 1214. Dans le journal détaillé, je vois "Action terminée 12:25:58: MigrateFeatureStates". Ensuite, je vois mes tests de conditions comme faux, donc les CustomActions sont sautés.Le côté de la commande (Unset_AppName_Version_Cmd) s'exécute après "WriteEnvironmentStrings", ce qui semble correct (avant RemoveFiles). Le problème est que Unset_AppName_Version n'est pas exécuté avant la phase InstallFinalize. Je ne comprends pas le délai. Que recommandez-vous en tant que paramètres pour Execute et Impersonate (je me suis débarrassé de cela) pour Unset_AppName_Version? – sleon