2010-07-16 16 views
13

मेरे पास एक बैच फ़ाइल है जिसे मुझे अपने एनएसआईएस इंस्टॉलर के भीतर चलाने की आवश्यकता है। सभी फ़ाइलों को निकालने के बाद इसे चलाना चाहिए, (मुझे लगता है कि यह स्पष्ट है, अन्यथा बैच फ़ाइल अभी तक मौजूद नहीं होगी)।एनएसआईएस इंस्टॉलर में बैच फ़ाइल निष्पादित

मैंने इसे चलाने के लिए फिनिश पेज के साथ MUI_PAGE_CUSTOMFUNCTION_PRE का उपयोग करने का प्रयास किया, लेकिन जब यह स्क्रिप्ट के उस हिस्से में आता है तो ऐसा लगता है कि यह उस पर सही छोड़ देता है। नीचे मैं इसे कैसे बुलाता हूं।

;;Finish Page 
!define MUI_PAGE_CUSTOMFUNCTION_PRE Done 
!insertmacro MUI_PAGE_FINISH 

Function Done 
    ExecWait '"$INSTDIR\BatchFile" "$INSTDIR" "$DATA_FOLDER"' 
FunctionEnd 

आपकी सहायता के लिए अग्रिम धन्यवाद।

अद्यतन

मैं अब का उपयोग कर की कोशिश की है निम्नलिखित:

ExpandEnvStrings $0 %COMSPEC% 
ExecWait '"$0" /C "$INSTDIR\batch.bat" "$INSTDIR" "$DATA_FOLDER"' 

यह काम नहीं किया है, इसलिए मैं/सी बाहर ले देखने के लिए क्या cmd शीघ्र कह रहे थे (यह पॉप अप हो रहा है, लेकिन तुरंत बंद हो रहा है) और ऐसा लगता है जैसे यह cmd.exe निष्पादित करता है लेकिन यह है, यह शेष निष्पादन को पूरा नहीं करता है।

अद्यतन # 2

कोर ज्ञान है कि मुझे करने के लिए नेतृत्व काम करने के लिए इसे प्राप्त करने यहां पाया जा सकता:

जो भी कारण फाइलों के साथ सहमत नहीं हूँ .bat लिए

Windows batch files: .bat vs .cmd?

ExecWait।

अंत में:

ExecWait '"$INSTDIR\BatchFile.cmd" "$INSTDIR" "$DATA_FOLDER"' 

ठीक काम किया।

SetOutPath $INSTDIR\${APPLICATION_DIR} 
    ExpandEnvStrings $0 %COMSPEC% 
    nsExec::ExecToStack '"C:\path-tobatch-file\commands.bat"' 

यहाँ NSIS विकी http://nsis.sourceforge.net/Docs/nsExec/nsExec.txt

+0

मैं चलाने में सक्षम था .bat fi ले, जैसा आपने ऊपर cmd फ़ाइलों के लिए पोस्ट किया है। आप ExecWait की बजाय nsExec :: Exec का उपयोग कर कमांड विंडो को प्रदर्शित होने से भी दबा सकते हैं। – Ben

उत्तर

7

Exec [प्रतीक्षा] के लिंक उचित की जरूरत है:

+1

यह सब अनदेखा करें, मुझे जो मिला वह देखने के लिए प्रश्न देखें। – Nedloh

5

मैं इस एक कार्यकारी एक्सटेंशन का उपयोग कर बहुत सफलतापूर्वक

इस वाक्य रचना है किया है उद्धरण:

ExpandEnvStrings $0 %COMSPEC% 
ExecWait '"$0" /C "c:\path\to\batch.cmd" "quoted param" normalparam "c:\last param"' 
+2

बस थोड़ा सा स्पष्ट करने के लिए। बैच फ़ाइलों को कमांड प्रोसेसर के माध्यम से चलाने की आवश्यकता है: 'batch_file.bat' के बजाय' cmd/c batch_file.bat'। कोई% COMSPEC% से 'cmd' तक पथ प्राप्त कर सकता है। – atzz

+0

यह बहुत अच्छा काम करता है, हालांकि, इसे सेट करने का कोई तरीका है ताकि बैच फ़ाइल निष्पादित होने पर कंसोल प्रदर्शित हो सके? बैच फ़ाइल फ़ाइलों की एक बड़ी संख्या की प्रतिलिपि/चाल करता है और मैं नहीं चाहता कि उपयोगकर्ता यह सोचें कि वास्तव में यह कुछ भी नहीं कर रहा है। – Nedloh

+0

आउटपुट प्रदर्शित करने के लिए, केवल एक सीधी एक्सईसी सीएमडी विंडो प्रदर्शित करेगा: एक्सेक '$ 0 "/ सी" सी: \ पथ-टू-बैच \ command.bat " – DBQ

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