2013-01-09 11 views

Odpowiedz

5

Możesz użyć tylko sekcji [RUN] z parameters i standardowej lub niestandardowej Checks. Pamiętaj o ustawieniu pojedynczego Flags - waituntilterminated powoduje, że skrypt instalatora czeka, aż jedna uruchomiona zakończy działanie, a następnie uruchomi następną.

Przykład:

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

[Run] 
Filename: "{tmp}\dotnetfx35.exe"; Parameters: "/q"; 
Flags: waituntilterminated skipifdoesntexist; 
StatusMsg: "Instalacja bibliotek Microsoft .NET Framework 3.5 SP1..."; 
OnlyBelowVersion: 0,6.2.8400; Check: NET35 

Filename: "{tmp}\vcredist_x86.exe"; Parameters: "/Q"; 
Flags: waituntilterminated skipifdoesntexist; 
StatusMsg: "Instalacja bibliotek Microsoft Visual C++ 2008 (x86)..."; 
Check: not Is64BitInstallMode 

Filename: "{tmp}\vcredist_x64.exe"; Parameters: "/Q"; 
Flags: waituntilterminated skipifdoesntexist; 
StatusMsg: "Instalacja bibliotek Microsoft Visual C++ 2008 (x64)..."; 
Check: Is64BitInstallMode 

Filename: "{tmp}\directx\DXSETUP.exe"; Parameters: "/silent"; 
Flags: waituntilterminated skipifdoesntexist; 
StatusMsg: "Instalacja bibliotek Microsoft DirectX..." 

Filename: "{app}\{#MyAppExeName}"; WorkingDir: "{app}\"; 
Flags: nowait postinstall runascurrentuser skipifsilent; 
Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}" 
+0

Dzięki za odpowiedź. Ten skrypt wydaje się być skryptem Inno. Czy możesz mi powiedzieć, jak mogę dodać pliki EXE i upuścić je w katalogu tymczasowym? Nigdy nie pracowałem z Inno. –

+0

Dodałem sekcję '[Files]'. Po prostu wskaż pliki do skopiowania do '{tmp}'. Po zakończeniu procesu instalacji wszystkie pliki umieszczone w katalogu '{tmp}' zostaną usunięte. W C: \ MyInstallers Mam wszystkie dodatkowe instalatory, które chcę wywołać w sekcji [Run] '(z DirectX w podfolderze). – RobeN

2

NSIS:

Section 
InitPluginsDir ; $pluginsdir is a folder in %temp%, it is deleted for you when the installer ends 
SetOutPath $PluginsDir 

File "child1.exe" 
ExecWait '"$PluginsDir\child1.exe" /foo "/bar" /baz' 
Delete "$PluginsDir\child1.exe" ; Optional, might be a good idea if the file is large... 

File "child2.exe" 
ExecWait '"$PluginsDir\child2.exe"' 

SetOutPath $Temp ; Don't lock $PluginsDir 
SectionEnd 
+0

Wielkie dzięki za pomoc! –

0

W InnoSetup można także inna instalacja z ShellExec-Function. Dzięki temu możesz zdefiniować, czy powinien on znajdować się z przodu, i czy główna instalacja powinna poczekać, aż zakończy się ta podinstalacja.

Oto krótki przykład, gdzie mogę rozpocząć instalację sqltools w Code-Sekcji

if ShellExec('',INSTALL_FOLDER + '\FPS\contributed\sqlncli_x64.msi', '' ,'',SW_HIDE,ewWaitUntilTerminated,ResultCode) then 
    begin 
     Log('executed sql native client with result code ' + IntToStr(ResultCode) + ' this means ' + SysErrorMessage(ResultCode)); 
    end 
    else 
    begin 
     showError(CustomMessage('SQLNATIVE_CLIENT_ABORTED') + SysErrorMessage(ResultCode)); 
    end;