2014-04-25 15 views
8

Używam Inno Setup, aby zainstalować i zaktualizować moją aplikację Pythona.Czy instalacja Inno powinna usuwać stare pliki z aktualizacji?

dniu aktualizacji instalator nie usuwać PY pliki z poprzedniej instalacji co stwarza dwa problemy:

  • używam wtyczek: Gdybym usunąć wtyczki w nowej wersji, to nadal tam użytkownicy, którzy dokonali aktualizacji.

  • Podczas odinstalowywania zaktualizowanej instalacji pliki ze starych instalacji nie zostaną usunięte. (Nie można odtworzyć ...)

Jak mogę zmusić Inno Setup odinstalować mojej aplikacji przed uaktualnieniem?

Oto mój skrypt:

[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 

Odpowiedz

13

ile to możliwe, aby uruchomić deinstalację przed uaktualnienie, nie jest to zalecane.

Zamiast tego należy użyć wpisów [InstallDelete], aby usunąć konkretne pliki , które są teraz zbędne. Powinieneś wiedzieć, które to pliki.

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

Choć możliwe jest użycie symboli wieloznacznych, to nie jest zalecane (zwłaszcza nie dzikie karty, które ignorują rozszerzenia plików), ponieważ może to niezamierzony usunąć pliki użytkownika, zwłaszcza jeśli {app} jest gdzieś nieoczekiwane (być one instalowane bezpośrednio pod ich oknami teczka).

Co do drugiego stwierdzenia, że ​​"Podczas odinstalowywania zaktualizowanej instalacji pliki ze starych instalacji nie zostaną usunięte.", To po prostu nieprawda. Tak długo, jak przechowujesz katalog AppId i folder docelowy tak samo, odinstalowanie odinstaluje wszystkie wcześniej zainstalowane pliki nawet po aktualizacji. Należy stosować następujące ustawienie, aby zapewnić w ten sposób:

[Setup] 
DisableDirPage=auto 

Dodatkowo, pod warunkiem, że nie została jeszcze wydana z tej aplikacji należy rozważyć zmianę jego DefaultDirName do {userpf}\YourAppName zamiast; jest to lepsza lokalizacja do instalacji aplikacji dla poszczególnych użytkowników. (Jeśli aplikacja została już wydana, możesz ją zmienić, pod warunkiem, że nie zmienisz wartości AppId, ale musisz pamiętać, że starsze instalacje pozostaną na starszej ścieżce.)

+1

Dziękujemy za szczegółową odpowiedź. Masz rację, nie mogę powtórzyć mojego drugiego problemu, więc może to była moja wina. – Hannes

Powiązane problemy