2010-11-17 28 views
15

ich ein Visual Studio 2010-Bereitstellungsprojekt mit den folgenden Einstellungen habe:Visual Studio 2010 - RemovePreviousVersions

DetectNewerInstalledVersion = True 
InstallAllUsers = True 
RemovePreviousVersions = True 

Das Projekt, das ich baue hat mehrere DLLs, die das Vermächtnis Art und Weise zurückzuführen, dass die Serialisierung die Dateiversionen für implementiert wurde Dieses Projekt kann nicht inkrementiert werden (was wir gerade ändern).

Wie kann ich das Installationsprojekt veranlassen, die vorhandenen Dateien vollständig zu entfernen (oder zumindest mit allen neuen Dateien zu überschreiben)?

Vielleicht muss ich Skript eine Deinstallation im Installer (kann mir jemand verbinden, dies zu tun, kann ich nicht finden)

Ich habe sah sich um und für alle vorhandenen Fragen und sie alle sagen, „erhöhen Ihre Datei Versionen ", aber für mich ist dies derzeit keine Option.

Antwort

20

Das mit Visual Studio (2008 und 2010) erstellte Installationsprojekt ersetzt nur Dateien, wenn die Versionsnummer erhöht wurde. Die naheliegende Lösung wäre, alle Versionsnummern zu erhöhen. aber wie du gesagt hast, ist das für dich nicht machbar.

Das Verhalten der .msi-Datei wird grundsätzlich durch den Zeitpunkt bestimmt, zu dem die Aktion RemoveExistingProducts ausgeführt wird. Installateure, die mit VS 2008 erstellt wurden, planen diese Aktion nach das neue Produkt wurde installiert. Geänderte Baugruppen, deren Version nicht inkrementiert wurde, werden daher nicht ersetzt. Einige weitere Informationen über das Updateverhalten sind in diesem Thread beschrieben:

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

das Verhalten zu ändern, können Sie die erstellte MSI-Datei patchen, so dass die RemoveExistingProducts Aktion ausgeführt wird vor der neues Produkt wird installiert (dies ist das Verhalten, wenn Sie das Setup mit Visual Studio 2005 erstellt haben). Das Patchen kann z.B. mit einem kleinen VBScript getan werden, die als post gebaut Schritt ausgeführt wird:

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

Das ist super danke. Für andere verweisen Sie auf mein PostBuildEvent (speichern Sie die VBS im Setup-Projektverzeichnis): cscript $ (ProjectDir) fixRemovePreviousVersions.vbs $ (BuiltOuputPath) – Seph

+0

@Seph Wie haben Sie ein PostBuildEvent für ein MSI-Projekt hinzugefügt? – wal

+0

Ok Ich habe es gefunden, versteckt im Eigenschaftenfenster des Projekts. :) – wal

1

Haben gleiches Problem mit einigen Setups migriert Form 2005 t0 2010 Herausgegeben Setup (.msi) mit ORCA-Datei und veränderte die Execute-Sequenz . RemoveExistingProducts vor InstallInitialize Dies hat das Installationsproblem behoben.

0

Der einfachste Weg, um eine vollständige Deinstallation durchzuführen, bevor eine neue Installation

  1. zu

    ist gehen Sie zu Ihrem „Startprojekt“ mit der rechten Maustaste und „Optionen“ auswählen.
  2. Klicken Sie auf die Schaltfläche "Assembly Information". Dann erhöhen Sie die Werte für "Assembly-Version" und "Dateiversion", klicken Sie auf "OK".
  3. Dann gehen Sie zu Ihrem Setup-Projekt. Stellen Sie sicher, dass "DetectNewInstalledVersion" auf "true" gesetzt ist, "RemovePreviousVersion" wahr ist, dann "Version" z. B. von 1.0.0 auf 1.0.1 inkrementieren, und dann erscheint ein Dialogfeld, in dem Sie aufgefordert werden, Ihren "ProductCode" zu aktualisieren. Ja". Stellen Sie sicher, dass Sie Ihr Startprojekt "neu erstellen" und anschließend das Setup-Projekt neu erstellen.

Dies wird den Trick tun. Genießen.Dann "Rechtsklick" auf Ihren Setup-Ordner und wählen Sie "Ordner im Windows Explorer öffnen" und schauen Sie unter dem "Release" -Ordner.

+0

Die Version kann nicht wie im OP erwähnt inkrementiert werden: 'Aufgrund der alten Art, wie die Serialisierung implementiert wurde, können die Dateiversionen für dieses Projekt nicht inkrementiert werden – Seph