2010-11-17 5 views
15

J'ai un Visual Studio 2010 Projet de déploiement avec les paramètres suivants:Visual Studio 2010 - RemovePreviousVersions

DetectNewerInstalledVersion = True 
InstallAllUsers = True 
RemovePreviousVersions = True 

Le projet que je suis bâtiment a plusieurs DLL qui en raison de la façon dont l'héritage que la sérialisation a été mis en œuvre les versions de fichiers pour ce projet ne peut pas être incrémenté (ce que nous sommes en train de changer).

Comment puis-je obtenir le projet d'installation pour supprimer complètement les fichiers existants (ou au moins écraser avec tous les nouveaux fichiers)?

Peut-être que j'ai besoin de scripter une désinstallation dans le programme d'installation (quelqu'un peut me lier à le faire, je ne peux pas trouver)

J'ai regardé autour et pour toutes les questions existantes et ils disent tous « incrémenter votre fichier versions ", cependant pour moi ce n'est pas actuellement une option.

Répondre

20

Le projet d'installation créé avec Visual Studio (2008 et 2010) remplacera uniquement les fichiers si le numéro de version a été incrémenté. La solution évidente serait simplement d'incrémenter tous les numéros de version; mais comme vous l'avez dit, ce n'est pas faisable pour vous.

Le comportement du fichier .msi est essentiellement déterminé par le moment où l'action RemoveExistingProducts est exécutée. Les installateurs créés avec VS 2008 programment cette action après le nouveau produit a été installé. Les assemblys modifiés dont la version n'a pas été incrémentée ne sont donc pas remplacés. Quelques détails sur le comportement de mise à jour sont décrites dans ce fil:

RemovePreviousVersions=True but previous version is not removed from the target machine

Pour changer le comportement, vous pouvez patcher le fichier .msi créé afin que l'action RemoveExistingProducts est exécutée avant la le nouveau produit est installé (cela a été le comportement si vous avez créé l'installation avec Visual Studio 2005). La réparation peut, par exemple, être fait en utilisant un petit VBScript qui fonctionne comme une étape de post-construction:

Dim objInstaller 
Dim objDatabase 
Dim objView 
Dim objResult 

Dim strPathMsi 

If WScript.Arguments.Count <> 1 Then 
    WScript.Echo "Usage: cscript fixRemovePreviousVersions.vbs <path to MSI>" 
    WScript.Quit -1 
End If 

strPathMsi = WScript.Arguments(0) 

Set objInstaller = CreateObject("WindowsInstaller.Installer") 
Set objDatabase = objInstaller.OpenDatabase(strPathMsi, 1) 
Set objView = objDatabase.OpenView("UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'") 

WScript.Echo "Patching install sequence: UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'" 
objView.Execute 
objDatabase.Commit 

WScript.Quit 0 
+3

C'est génial merci. Pour les autres référence mon PostBuildEvent est (enregistrez les vbs dans le répertoire du projet d'installation): cscript $ (ProjectDir) fixRemovePreviousVersions.vbs $ (BuiltOuputPath) – Seph

+0

@Seph Comment avez-vous ajouté un PostBuildEvent pour un projet MSI? – wal

+0

Ok, je l'ai trouvé, caché dans la fenêtre Propriétés du projet. :) – wal

1

avait même problème avec deux configurations migré sous forme 2005 t0 2010. configuration édité (.msi) avec ORCA et a changé la séquence d'exécution . RemoveExistingProducts avant InstallInitialize Cela a résolu le problème d'installation.

0

La meilleure façon d'effectuer une désinstallation complète avant une nouvelle installation est de

  1. aller à votre « projet de démarrage », faites un clic droit et sélectionnez « Options ».
  2. Cliquez sur le bouton "Informations sur l'assemblage". Puis incrémentez la "version d'assemblage" et les valeurs "version du fichier", cliquez sur "ok".
  3. Ensuite, allez dans votre projet d'installation. Assurez-vous que "DetectNewInstalledVersion" est réglé sur "RemovePreviousVersion" est vrai, puis incrémentez "version" par exemple de 1.0.0 à 1.0.1, puis une boîte de dialogue apparaîtra vous demandant de mettre à jour votre "ProductCode", sélectionnez simplement " Oui". Assurez-vous de "reconstruire" votre projet de démarrage, puis reconstruisez votre projet d'installation.

Cela fera l'affaire. Prendre plaisir.Puis "clic droit" sur votre dossier d'installation et choisissez "ouvrir le dossier dans Windows Explorer" et regardez dans le dossier "release".

+0

Impossible d'incrémenter la version comme indiqué dans l'OP: 'En raison de la façon dont la sérialisation a été implémentée, les versions de ce projet ne peuvent pas être incrémentées. – Seph