5 votes

WiX: Correctif d'installation remplaçant les versions précédentes (1.0.0 -> 1.0.1, 1.0.0 -> 1.0.2, 1.0.1 -> 1.0.2, etc.)

Je cherche à fournir un package d'installation simple (MSI) que je veux prendre en charge avec des mises à jour (correctifs) qui remplacent tous les correctifs précédents. Donc j'ai un MSI V1.0.0 et 2 correctifs V1.0.1 et V1.0.2. L'utilisateur devrait pouvoir installer simplement le dernier correctif quelles que soient les correctifs précédents déjà appliqués au système. Mon projet contient 2 fonctionnalités (Client et Serveur). La base du correctif est toujours le package RTM (HelloWorld 1.0.msi / HelloWorld 1.0.wixpdb).

La génération (construction) de tous les correctifs fonctionne, donc les procédures de mise à jour 1.0.0 -> 1.0.1 et 1.0.0 -> 1.0.2 fonctionnent, mais lorsque j'essaie de mettre à jour de 1.0.1 à 1.0.2, le correctif échoue avec le message d'erreur suivant : "Le correctif de mise à jour ne peut pas être installé par le service Windows Installer car le programme à mettre à niveau peut être manquant, ou le correctif de mise à niveau peut mettre à jour une version différente du programme. Vérifiez que le programme à mettre à niveau existe sur votre ordinateur et que vous avez le correctif de mise à niveau correct.". Encore pire, lorsque j'exécute le correctif 1.0.1 sur un système où 1.0.2 est déjà installé, le correctif écrase l'installation existante avec une version plus ancienne !? Je suis totalement perdu...

J'ai également trouvé plusieurs articles de blog sur le web sur la création de correctifs, mais rien qui fonctionne avec mon scénario de remplacement.

code de correctif wix - "patch1.wxs":

script de création du correctif 1 - "generate_patch1.bat":

"%WIX%\bin\torch.exe" -p -xi ".\_Distrb\HelloWorld 1.0.wixpdb" ".\_Distrb\HelloWorld 1.0.1.wixpdb" -out ".\_Build\patch1.wixmst"
"%WIX%\bin\candle.exe" -out ".\_Build\patch1.wixobj" ".\patch1.wxs"
"%WIX%\bin\light.exe" ".\_Build\patch1.wixobj" -out ".\_Build\patch1.wixmsp"
"%WIX%\bin\pyro.exe" ".\_Build\patch1.wixmsp" -out ".\_Distrb\HelloWorld 1.0 Patch1.msp" -t HelloWorldRTM ".\_Build\patch1.wixmst"

code de correctif wix - "patch2.wxs":

script de création du correctif 2 - "generate_patch2.bat":

"%WIX%\bin\torch.exe" -p -xi ".\_Distrb\HelloWorld 1.0.wixpdb" ".\_Distrb\HelloWorld 1.0.2.wixpdb" -out ".\_Build\patch2.wixmst"
"%WIX%\bin\candle.exe" -out ".\_Build\patch2.wixobj" ".\patch2.wxs"
"%WIX%\bin\light.exe" ".\_Build\patch2.wixobj" -out ".\_Build\patch2.wixmsp"
"%WIX%\bin\pyro.exe" ".\_Build\patch2.wixmsp" -out ".\_Distrb\HelloWorld 1.0 Patch 2.msp" -t HelloWorldRTM ".\_Build\patch2.wixmst"

1voto

stellkang Points 43

J'ai eu un problème similaire et je l'ai résolu en ajoutant la validation appropriée au patch wxs. Essayez ceci...

Si vous ne voulez pas que le patch fonctionne lorsque le numéro de révision installé est supérieur au numéro de révision du patch, vous voudrez peut-être changer ProductVersion en "Update" et régler ProductVersion sur "GreaterOrEqual".

J'espère que cela fonctionnera pour vous!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X