2013-02-20 41 views
8

चुपचाप MySQL स्थापित करने के लिए, मैं cmd ​​में आदेश के बाद की कोशिश की है और यह ठीक काम करता है:कैसे Inno सेटअप में cmd ​​आदेश पर अमल करने के लिए

msiexec /i "mysql-essential-6.0.11-alpha-winx64.msi" /qn 

लेकिन, मुझे लगता है कि आदेश कैसे चला सकते हैं Inno सेटअप में स्थापित कर रहा है इससे पहले कि?

+0

मैं व्यक्तिगत रूप से संस्थापक की इस तरह के लिए 'qn' विकल्प का उपयोग नहीं होता। इसमें कुछ समय लग सकता है (चूंकि यह एक डेटाबेस सिस्टम है), और ध्यान दें कि उस समय के दौरान MySQL की स्थापना प्रगति पर होगी, उपयोगकर्ता पृष्ठभूमि के साथ कुछ भी नोटिस के बिना "खाली" समग्र स्थापना प्रगति पट्टी को देखेगा। – TLama

+0

उपयोगकर्ता नोटिस के लिए मैं का उपयोग कर रहा हूं इस तरह और उपयोगकर्ता इसे देख सकता है। क्या आपके पास बेहतर तरीका है? –

+0

मुझे लगता है कि यह ठीक है, लेकिन आप 'ECHO' आदेश कहां निष्पादित करेंगे? क्या आपके पास बैच फ़ाइल है? – TLama

उत्तर

10

ईवेंट विधि से Exec फ़ंक्शन को कॉल करके आप इसे निष्पादित कर सकते हैं, जब चरण ssInstall होगा। में निम्न स्क्रिप्ट दिखाया गया है, कैसे शामिल करने के लिए अपना सेटअप और कैसे में MySQL संस्थापक निकालने और यह निष्पादित करने के लिए सही से पहले स्थापना शुरू होता है:

:

#define MySQLInstaller "mysql-essential-6.0.11-alpha-winx64.msi" 

[Files] 
Source: "{#MySQLInstaller}"; Flags: dontcopy 
[Code] 
procedure CurStepChanged(CurStep: TSetupStep); 
var 
    Params: string; 
    ResultCode: Integer; 
begin 
    if (CurStep = ssInstall) then 
    begin 
    ExtractTemporaryFile('{#MySQLInstaller}'); 
    Params := '/i ' + AddQuotes(ExpandConstant('{tmp}\{#MySQLInstaller}')) + ' /qn'; 
    if not Exec('msiexec', Params, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then 
     MsgBox('Installation of MySQL failed. Exit code: ' + IntToStr(ResultCode), 
      mbInformation, MB_OK); 
    end; 
end; 

अप्रयुक्त प्रगति बार का उपयोग

चूंकि MySQL खत्म होने से पहले कुछ समय लगता है, और आपने इंस्टॉलर के उपयोगकर्ता इंटरफ़ेस को छिपाने का निर्णय लिया है (वैसे भी असुरक्षित भी हो सकता है), आप प्रगति पट्टी का उपयोग करने के लिए स्क्रिप्ट का विस्तार कर सकते हैं अपने शुरुआती पॉसी में दिखाया गया स्थापना के दौरान टयन और उस समय अप्रयुक्त है। निम्न कोड स्विच (कम से कम विंडोज एक्सपी सिस्टम पर) इनो सेटअप की स्थापना प्रगति बार marquee style पर और स्थिति लेबल में एक विवरण दिखाता है। जब MySQL स्थापना किया जाता है, प्रगति बार सामान्य मोड और वास्तविक Inno सेटअप स्थापना शुरू होता है में वापस स्विच है:

#define MySQLInstaller "mysql-essential-6.0.11-alpha-winx64.msi" 

[Files] 
Source: "{#MySQLInstaller}"; Flags: dontcopy 
[Code] 
procedure CurStepChanged(CurStep: TSetupStep); 
var 
    Params: string; 
    ResultCode: Integer; 
begin 
    if (CurStep = ssInstall) then 
    begin 
    WizardForm.ProgressGauge.Style := npbstMarquee; 
    WizardForm.StatusLabel.Caption := 'Installing MySQL. This may take a few minutes...'; 

    ExtractTemporaryFile('{#MySQLInstaller}'); 
    Params := '/i ' + AddQuotes(ExpandConstant('{tmp}\{#MySQLInstaller}')) + ' /qn'; 
    if not Exec('msiexec', Params, '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then 
     MsgBox('Installation of MySQL failed. Exit code: ' + IntToStr(ResultCode), 
      mbInformation, MB_OK); 

    WizardForm.ProgressGauge.Style := npbstNormal; 
    WizardForm.StatusLabel.Caption := ''; 
    end; 
end; 
+2

यह काम करेगा, लेकिन प्रीइंस्टॉलेशन सामान के लिए अब इसके बजाय 'PrepareToInstall' ईवेंट फ़ंक्शन का उपयोग करना बेहतर होगा। यह त्रुटियों और अन्य आवश्यकताओं जैसे रीबूट-पहले-जारी रखने को संभालने में बेहतर है। अधिक जानकारी के लिए इनो के साथ शामिल उदाहरण स्क्रिप्ट देखें। मैं दृढ़ता से '/ qn' के बजाय'/qb' का उपयोग करने की भी सिफारिश करता हूं; यह अभी भी इंस्टॉलेशन को तुरंत शुरू करता है लेकिन ऐसा करने पर यह प्रगति दिखाता है। – Miral

+0

@ मिरल, यह सच है, अगर इंस्टॉल के बाद रीबूट की आवश्यकता होगी। त्रुटि प्रबंधन के बारे में; 'ssInstall' चरण पर 'CurStepChanged' से' आप अभी भी उपयोगकर्ता को बता सकते हैं कि MySQL की स्थापना विफल रही है और यदि आप इस तरह का पालन करते हैं तो सेटअप को 'निरस्त करें'। 'Qn' विकल्प के बारे में; जैसा कि मैंने कहा, मैं भी इसके खिलाफ हूं। – TLama

+1

मुझे पता है, मैं बस ओपी के लिए फिर से जोर देने की कोशिश कर रहा था। :) – Miral