2014-04-25 12 views
8

Ich verwende Inno Setup, um meine Python-Anwendung zu installieren und zu aktualisieren.Sollte Inno Setup alte Dateien auf Update löschen?

Auf Update ist das Installationsprogramm nicht py-Dateien aus der vorherige Installation löscht, die zwei Probleme bereitet:

  • Ich Plugins: Wenn ich ein Plugin in einer neuen Version löschen, es ist immer noch da für Benutzer, die ein Update durchgeführt haben.

  • Beim Deinstallieren einer aktualisierten Installation werden Dateien aus den alten Installationen nicht entfernt. (kann nicht reproduzieren ...)

Wie kann ich Inno Setup erzwingen meine Anwendung zu deinstallieren, bevor Sie das Upgrade?

Hier ist mein Script:

[Setup] 
AppName=Foo 
AppVersion=0.1 
PrivilegesRequired=lowest 
AppId=FooID 
RestartIfNeededByRun=False 
DefaultDirName={localappdata}\Foo 
DisableWelcomePage=True 
DisableReadyPage=True 
OutputDir=.\win 
OutputBaseFilename=setup_Foo 
AllowNoIcons=yes 
DefaultGroupName=Foo 

[Files] 
Source: "dist\Foo.exe"; DestDir: "{app}" 
Source: "..\*"; DestDir: "{app}\"; Flags: recursesubdirs; Excludes: "*.pyc,installer" 

[Icons] 
Name: "{group}\Foo"; Filename: "{app}\Foo.exe"; WorkingDir: "{app}" 
Name: "{group}\Uninstall Foo"; Filename: "{uninstallexe}" 

[Dirs] 
Name: "{app}\plugins" 

[Run] 
Filename: "{app}\Foo.exe"; WorkingDir: "{app}"; Flags: nowait postinstall 

Antwort

13

Während es möglich ist, die Deinstallation vor einem Upgrade laufen, ist es nicht empfehlenswert.

Stattdessen sollten Sie [InstallDelete] Einträge verwenden, um die spezifischen Dateien zu entfernen, die jetzt redundant sind. Sie sollten wissen, welche Dateien das sind.

[InstallDelete] 
Type: files; Name: {app}\foo.bar 
Type: files; Name: {app}\baz\quux.txt 

Während es möglich ist Platzhalter zu verwenden, wird dies nicht empfohlen (insbesondere keine Platzhalter, die Dateierweiterungen ignorieren), da sie versehentlich Dateien Benutzer löschen kann, vor allem, wenn {app} irgendwo unerwartet ist (vielleicht installiert sie direkt in ihre Windows- Mappe).

Wie für Ihre zweite Behauptung, dass "bei der Deinstallation einer aktualisierten Installation, Dateien von den alten Installationen nicht entfernt werden.", Das ist einfach nicht wahr. Solange Sie den Ordner AppId und den Zielordner beibehalten, deinstalliert die Deinstallation alle zuvor installierten Dateien auch nach einem Update. Sie sollten die folgende Einstellung verwenden, um dies zu helfen, sicherzustellen, dass:

[Setup] 
DisableDirPage=auto 

Zusätzlich vorgesehen ist, dass Sie noch nicht diese Anwendung freigegeben haben Sie berücksichtigen sollten seine DefaultDirName-{userpf}\YourAppName statt zu ändern; Dies ist ein besserer Speicherort für benutzerspezifische Anwendungen. (Wenn Sie die App bereits freigegeben haben, ist es immer noch sicher, diesen Wert zu ändern, vorausgesetzt, Sie ändern nicht die AppId, aber Sie müssen berücksichtigen, dass ältere Installationen auf dem älteren Pfad bleiben.)

+1

Vielen Dank Sie für die detaillierte Antwort. Du hast recht, ich kann mein zweites Problem nicht reproduzieren, also war das vielleicht meine Schuld. – Hannes

Verwandte Themen