2013-10-25 4 views
20

यह [फ़ाइलें] मेरे कोड के भाग अब तक है चलने से पहले:Inno सेटअप: अन्य संस्थापक स्थापित करें और जारी मेरी स्थापित

[Files] 
Source: "other_installer.exe"; DestDir: "{app}" 
Source: "myprogram.exe"; DestDir: "{app}" 
Source: "data.dat"; DestDir: "{app}" 
Source: "otherdata.dat"; DestDir: "{app}" 

मेरे कार्यक्रम किसी अन्य प्रोग्राम को चलाने के लिए पर निर्भर है। मैंने अपने इंस्टॉलर में इस प्रोग्राम ("other_installer.exe") के लिए इंस्टॉलर शामिल किया है। मैं जो करना चाहता हूं वह इस इंस्टॉलर को "myprogram.exe" और बाकी के साथ जारी रखने से पहले कॉपी किया गया है।

मैंने गूंज लिया है और इनो सेटअप सहायता में पहले इंस्टॉल के लिए प्रलेखन पाया है, लेकिन उनके पास कोई अन्य एप्लिकेशन चलाने का उदाहरण नहीं है। मेरा मानना ​​है कि यह कुछ इस तरह होना चाहिए: जिस तरह से आप जाना AfterInstall पैरामीटर हो सकता है के लिए

[Files] 
Source: "other_installer.exe"; DestDir: "{app}" 
Source: "myprogram.exe"; DestDir: "{app}"; BeforeInstall: // RUN OTHER_INSTALLER.EXE // 
Source: "data.dat"; DestDir: "{app}" 
Source: "otherdata.dat"; DestDir: "{app}" 

उत्तर

24

बेहतर। OtherInstaller.exe फ़ाइल प्रविष्टि संसाधित होने के बाद निम्न स्क्रिप्ट RunOtherInstaller फ़ंक्शन निष्पादित करेगी। वहां यह केवल स्थापित OtherInstaller.exe फ़ाइल निष्पादित करने का प्रयास करता है और यदि यह विफल रहता है, तो यह उपयोगकर्ता को एक त्रुटि संदेश रिपोर्ट करता है। कृपया ध्यान दें कि आपको लगता है कि समारोह से स्थापना को बाधित नहीं कर सकते हैं, तो यह क्या आप इस तरह से करना चाहते हैं के लिए बहुत सुरक्षित नहीं है:

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 

[Files] 
Source: "OtherInstaller.exe"; DestDir: "{app}"; AfterInstall: RunOtherInstaller 
Source: "OtherFile.dll"; DestDir: "{app}" 

[Code] 
procedure RunOtherInstaller; 
var 
    ResultCode: Integer; 
begin 
    if not Exec(ExpandConstant('{app}\OtherInstaller.exe'), '', '', SW_SHOWNORMAL, 
    ewWaitUntilTerminated, ResultCode) 
    then 
    MsgBox('Other installer failed to run!' + #13#10 + 
     SysErrorMessage(ResultCode), mbError, MB_OK); 
end; 
+0

क्या बाद में इंस्टॉलेशन को बाधित करना और बाधित करना संभव है (और संभावित रूप से रोलबैक)? – Septagram

0

आप AfterInstall उपयोग कर सकते हैं मदद में इस बात के लिए लग रही है। जब फ़ाइल की प्रतिलिपि बनाई जाती है, तो मैं आपके द्वारा "AfterInstall:" के रूप में रखे गए फ़ंक्शन/प्रक्रिया को लॉन्च करूंगा।

इस फ़ंक्शन/प्रक्रिया में, एक्सेक का उपयोग करें और अन्य इंस्टॉलर लॉन्च करें।

+0

हाँ, मुझे खेद है कि मेरा जवाब आपके जैसा ही है –

8

पूर्वापेक्षाएँ इंस्टॉलर चलाने के लिए एक और अच्छा समय PrepareToInstall ईवेंट फ़ंक्शन में है। (बुनियादी संरचना के लिए Inno के साथ प्रदान की उदाहरण स्क्रिप्ट देखें, और वास्तविक निष्पादन के लिए TLama के कोड।)

PrepareToInstall का मुख्य लाभ यह आप बच्चे को इंस्टॉलर से त्रुटियों और रिबूट अनुरोधों को हैंडल करने की अनुमति देता है - AfterInstall का उपयोग कर ऐसा नहीं करता।

इसका मुख्य नुकसान यह है कि आपको बच्चे को इंस्टॉल करने के लिए मैन्युअल रूप से ExtractTemporaryFile कुछ भी आवश्यक है, क्योंकि यह निकाली जाने वाली फ़ाइलों से पहले होता है।

संबंधित मुद्दे