2013-09-03 16 views
9

Po zakończeniu instalacji muszę usunąć niektóre pliki.Usunięcie pliku PO instalacji w InnoSetup

Używałem sekcji [RUN] do wywoływania CMD, aby usunąć pliki, ale chciałem poprawić usuwanie przy użyciu kodu InnoSetup, a nie Batch, to widziałem sekcję [InstallDelete], ale to usuń pliki PRZED [RUN] sekcja, więc ... jest coś, co mogę zrobić, aby usunąć pliki po sekcji [RUN]?

Oto mój skrypt:

#define InstallerName "VirtualBox-4.2.16-r86992-MultiArch_amd64.msi" 
#define ExtensionName "Oracle_VM_VirtualBox_Extension_Pack-4.2.16-86992.vbox-extpack" 

[Setup] 
AppName=VirtualBox 
blah blah blah... 
blah blah blah... 

[Files] 
Source: {tmp}\*; DestDir: {tmp}; Flags: deleteafterinstall recursesubdirs createallsubdirs ignoreversion 

[Run] 
Filename: {tmp}\{#InstallerName}; Parameters: "/passive /norestart ADDLOCAL=VBoxApplication INSTALLDIR=""{app}"""; StatusMsg: Instalando VirtualBox...; Flags: shellexec RunHidden WaitUntilTerminated 
Filename: {tmp}\xml.exe; Parameters: "ed --inplace -N N=""http://www.innotek.de/VirtualBox-settings"" --update ""//N:ExtraDataItem[@name='GUI/UpdateDate']/@value"" --value never ""{%userprofile}\.virtualbox\virtualbox.xml"""; StatusMsg: Instalando VirtualBox...; Flags: RunHidden WaitUntilTerminated 
Filename: {app}\VBoxManage.exe; Parameters: "extpack install --replace ""{tmp}\{#ExtensionName}"""; StatusMsg: Instalando Extension Pack...; Flags: RunHidden WaitUntilTerminated 
Filename: {app}\virtualbox.exe; Description: {cm:LaunchProgram,VirtualBox}; Flags: shellexec postinstall unchecked skipifsilent nowait 

[InstallDelete] 
Name: {commondesktop}\Oracle VM VirtualBox.lnk; Type: files 
Name: {commonstartmenu}\Programs\Oracle VM VirtualBox; Type: filesandordirs 

Odpowiedz

9

Jeśli próbujesz usunąć pliki tymczasowe (np. wymagane przez podinstalację):

Wszystko, co zainstalujesz na {tmp}, zostanie automatycznie usunięte po zakończeniu instalacji.

Jeśli nie możesz zainstalować z {tmp} z jakiegoś powodu, możesz użyć flagi deleteafterinstall na pozycji .

Jeśli próbujesz usunąć pliki utworzone przez tę podinstalację, powinieneś skontaktować się z dostawcami lub sprawdzić ich dokumentację i sprawdzić, czy istnieje parametr wiersza poleceń, który można przekazać, aby w ogóle powstrzymać instalację tego elementu. Zwykle powinny istnieć opcje opcjonalne, takie jak ikony pulpitu.

+1

O ile rozumiem, te pliki nie są częścią instalacji, więc "deleteafterinstall" nie jest opcją. Być może źle to zrozumiałem .. –

+0

Dzięki za odpowiedź, tak być może najlepszym sposobem jest sprawdzenie, czy MSI ma pakiet/parametr, aby nie instalować plików lnk, ale muszę zrobić to samo dla partii instalatorów, więc nie mogę spędzić tego czasu szukając wszystkich opcji pakietu MSI. – ElektroStudios

10

Można usunąć pliki na stanowisku zainstalować krok obsługi CurStepChanged zdarzeń

[Code] 
procedure CurStepChanged(CurStep: TSetupStep); 
begin 
    if CurStep = ssPostInstall then begin 
    DeleteFile(ExpandConstant('{commondesktop}\Oracle VM VirtualBox.lnk')); 
    .. 
+0

Dzięki, ale czy masz szansę zrobić to bez użycia Pascala lub Batcha? – ElektroStudios

+1

@Elektro - AFAIK, nie. Ale uważałbym "kod" w skrypcie za część kodu InnoSetup, ale to byłaby moja opinia .. –

+0

Cóż, jeśli nie ma innego sposobu, używając zewnętrznego kodu ... dzięki – ElektroStudios

1

W końcu to, co zrobiłem, to jest to.

Firts Próbuję usunąć oryginalne pliki pakietów MSI, jeśli istnieją one w sekcji [InstallDelete], ale to nie powoduje całkowitego usunięcia folderu, a następnie wypakowuję fałszywy plik i folder w tych samych lokalizacjach za pomocą "deleteafterinstall" "flaga, aby je usunąć.

Jeśli uważasz, że można to poprawić, proszę po prostu powiedz mi jak to zrobić, naprawdę nie chcę używać zewnętrznego kodu, ponieważ potrzebuję "ogólnego" sposobu zrobienia tego dla około 200 instalatorów, pisanie kod dla tej ilości instalatorów zajmuje dużo czasu.

#define InstallerName "VirtualBox-4.2.16-r86992-MultiArch_amd64.msi" 
#define ExtensionName "Oracle_VM_VirtualBox_Extension_Pack-4.2.16-86992.vbox-extpack" 

[Setup] 
AppName=VirtualBox 
... 
... 

[InstallDelete] 
Name: {commondesktop}\Oracle VM VirtualBox.lnk; Type: files 
Name: {commonstartmenu}\Programs\Oracle VM VirtualBox; Type: filesandordirs 

[Dirs] 
Name: {commonstartmenu}\Programs\Oracle VM VirtualBox; Flags: deleteafterinstall; attribs: hidden 

[Files] 
Source: {commondesktop}\Oracle VM VirtualBox.lnk; DestDir: {commondesktop}; Flags: deleteafterinstall ignoreversion; Attribs: hidden 
Source: {tmp}\*; DestDir: {tmp}; Flags: deleteafterinstall recursesubdirs createallsubdirs ignoreversion 

[Icons] 
Name: {userstartmenu}\Programs\Multimedia\VirtualBox; Filename: {app}\virtualbox.exe; WorkingDir: {app} 

[Run] 
Filename: {tmp}\{#InstallerName}; Parameters: "/passive /norestart ADDLOCAL=VBoxApplication INSTALLDIR=""{app}"""; StatusMsg: Instalando VirtualBox...; Flags: shellexec RunHidden WaitUntilTerminated 
Filename: {tmp}\xml.exe; Parameters: "ed --inplace -N N=""http://www.innotek.de/VirtualBox-settings"" --update ""//N:ExtraDataItem[@name='GUI/UpdateDate']/@value"" --value never ""{%userprofile}\.virtualbox\virtualbox.xml"""; StatusMsg: Instalando VirtualBox...; Flags: RunHidden WaitUntilTerminated 
Filename: {app}\VBoxManage.exe; Parameters: "extpack install --replace ""{tmp}\{#ExtensionName}"""; StatusMsg: Instalando Extension Pack...; Flags: RunHidden WaitUntilTerminated 
Filename: {app}\virtualbox.exe; Description: {cm:LaunchProgram,VirtualBox}; Flags: shellexec postinstall unchecked skipifsilent nowait 
+0

Sekcja '[InstallDelete]' jest pierwszym krokiem procesu instalacji, sekcja '[Uruchom]' jest wykonywana znacznie później. Jeśli więc usuniesz coś, co jest zainstalowane z sekcji "[Uruchom]", robisz to źle. Jeśli nie chcesz używać kodu w sekcji "[Kod]", użyj np. komenda 'del' i uruchom ją z sekcji' [Uruchom] 'gdzieś po wpisie instalacyjnym.Ale, jak sugeruje Miral, najlepiej jest sprawdzić, czy istnieje sposób, aby uniemożliwić instalatorowi nawet tworzenie tych skrótów. – TLama

+0

@ TLama będzie oznaczać polecenie "Del" CMD lub może jest poleceniem InnoSetup ?. Muszę powiedzieć, że instalator działa poprawnie i usuwa plik i folder. Wiem, że to trochę trudny sposób na zrobienie tego, ale ... działa xD – ElektroStudios

+0

Cóż, więc zupełnie nie rozumiem twojego pytania. Myślałem, że instalujesz coś z sekcji "[Uruchom]" i że coś tworzy skróty na pulpicie i menu startowym. I że chcesz usunąć te skróty po instalacji, że coś jest zrobione. – TLama