2013-01-09 29 views
5

मैं एक इंस्टॉलर खत्म करने के बाद एक सॉफ्टवेयर इंस्टॉलर को अन्य एक्सई/इंस्टॉलर निष्पादित करना चाहता हूं। इससे कोई फर्क नहीं पड़ता कि कौन सा इंस्टॉलर इस्तेमाल करता है (एनएसआईएस, इनो सेटअप इत्यादि) इसे बनाने के लिए, मैं बस यह करना चाहता हूं।एक इंस्टॉलर में एकाधिक इंस्टॉलर्स/exe निष्पादित करना?

क्या यह भी संभव है?

उत्तर

5

आप [RUN] सेक्शन parameters और मानक या कस्टम Checks के साथ उपयोग कर सकते हैं। priopriate Flags - waituntilterminated सेट करने के बारे में याद रखें इंस्टॉलर स्क्रिप्ट को तब तक इंतजार करना पड़ता है जब तक कि एक लॉन्च नहीं हुआ है और उसके बाद लॉन्चर हो।

उदाहरण:

[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

अपने जवाब के लिए धन्यवाद। यह स्क्रिप्ट इनो लिपि प्रतीत होती है। क्या आप कृपया मुझे बता सकते हैं कि मैं EXE कैसे जोड़ सकता हूं और उन्हें temp dir में कैसे छोड़ सकता हूं? मैंने कभी इनो के साथ काम नहीं किया है। –

+0

मैंने '[फ़ाइलें]' अनुभाग जोड़ा है। आप बस फ़ाइलों को '{tmp} 'पर कॉपी करने के लिए इंगित करते हैं। स्थापना प्रक्रिया समाप्त होने के बाद, इंस्टॉलर के '{tmp}' में रखी गई सभी फ़ाइलों को हटा दिया जाएगा। सी में: \ MyInstallers मेरे पास सभी अतिरिक्त इंस्टॉलर हैं जिन्हें मैं '[रन]' सेक्शन में कॉल करना चाहता हूं (सबफ़ोल्डर में डायरेक्टएक्स के साथ)। – 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

धन्यवाद मदद के लिए बहुत कुछ! –

0

InnoSetup में आप भी कर सकते हैं ShellExec-समारोह के साथ एक और स्थापना। इसके साथ आप परिभाषित कर सकते हैं कि क्या यह आगे होना चाहिए और यदि मुख्य स्थापना को इस उप-स्थापना समाप्त होने तक प्रतीक्षा करनी चाहिए।

यहाँ

एक छोटी उदाहरण है, जहां मैं कोड-धारा में sqltools की स्थापना शुरू

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;