2010-12-07 50 views
1

J'ai livré la version 1.0 de mon logiciel avec un installateur généré par WiX, et maintenant je veux livrer/diffuser la version 1.1. Si possible, je voudrais éviter la situation de dire aux gens d'enlever 1.0 manuellement d'abord avant d'installer 1.1.Puis-je utiliser WiX pour créer un MSI dont le seul but est de désinstaller le logiciel?

Cependant, j'ai dû modifier le InstallScope, en le changeant de perUser en perMachine pour diverses raisons techniques. Pas une grosse affaire, sauf que cela rend la mise à niveau d'un tracas. Ce que je vois se produire est la même chose que this post mentionne, dans lequel même si vous avez fait tous les proper work pour implémenter une mise à niveau, quand c'est fait, vous voyez deux entrées différentes sur la liste des programmes installés, l'un est 1,0 et l'autre est 1,1. Et cela provoque des problèmes dans le logiciel. Donc, il semblerait que la logique de base "supprimer la version précédente" ne fonctionne pas ici, donc j'ai besoin d'une autre méthode de désinstallation de la version précédente. J'ai essayé de descendre la commande msiexec /x pour supprimer la version précédente via un ShellExecute CustomAction, mais à moins que je ne manque quelque chose, il n'y a pas de place dans la séquence où cela fonctionnerait parce que vous déclenchez une commande msiexec dans le au milieu d'un autre courant.

Puis je suis tombé sur this page qui détaille une méthode peu documenté de « enchaînant » l'ensemble de MSI:

setupbld.exe -out $(TargetDir)setup.exe -msu FirstInstaller.msi -msu SecondInstaller.msi -setup $(ProjectDir)setup.exe 

sonne bien - tout ce que je besoin est maintenant une MSI dont la seule fonction est de supprimer la version 1.0 et Je peux enchaîner cela avec l'ancien. Sauf que je ne trouve pas beaucoup de documentation sur la façon dont vous pourriez faire cela. En fait, puisque cela pourrait théoriquement être utilisé pour supprimer des logiciels que vous n'avez pas installés à l'origine, je ne suis pas sûr que cela soit techniquement possible pour des raisons de sécurité.

Est-ce que quelqu'un sait comment créer un MSI en utilisant WiX dont le seul but est de désinstaller le logiciel? Ou est-ce que j'attaque complètement ce problème?

Répondre

2

Utilisez ce Wix pour désinstaller la version précédente dans le cadre de votre version 1.1. Je ne sais pas pourquoi vous devez enchaîner les MSI ensemble.

How to implement WiX installer upgrade?

EDIT: J'ai raté le changement de condition InstallScope. Donc, ce qui est vraiment nécessaire est un bootstrapper.

J'ai posté comment créer un BootStrapper ici: I need a WIX Bootstrapper Project that installs MY software and prerequisites

+0

Bien que ce soit habituellement un bon conseil, la modification dans InstallScope empêche la désinstallation de la version précédente des entrées de la table de mise à niveau, comme indiqué au début de la question de Schnapple. –

+0

Je ne sais pas pourquoi j'ai raté cette partie de la question. Doh! – DarrellNorton

+0

Quelque chose que j'ai oublié de mentionner est que le logiciel impliqué dans mon message n'est pas lié à .NET (ie, il n'utilise pas ou n'a pas besoin de .NET), donc je ne peux pas exiger que .NET soit une condition préalable pour exécuter le programme d'installation (une incarnation antérieure à 1.0 de ce logiciel avait besoin .NET et boy howdy avons-nous découvert combien d'utilisateurs de XP ne l'avaient pas installé). En un coup d'œil je ne peux pas dire - le projet DotNetBootstrapper mentionné dans votre question liée nécessite .NET pour exécuter le programme d'installation? Ou juste. NET pour exécuter l'interface graphique pour le concevoir? –

0

Une solution est d'utiliser une action personnalisée qui exécute la commande « msiexec.exe/x ». Assurez-vous qu'il est planifié après InstallFinalize dans InstallExecuteSequence. En outre, il est Retour doit être asyncNoWait (exécution asynchrone, n'attendez pas de retour).

Avec ces paramètres, la désinstallation utilise un processus asynchrone différent, évitant le conflit.

+0

Pour une raison quelconque, cela ne fonctionnerait pas pour moi. Peut-être que c'était le changement dans InstallScope. En tout cas, je finirais avec deux copies du logiciel installé, qui ne fonctionneraient pas –