बैच फ़ाइल को खुले रखने के बिना पृष्ठभूमि में एक प्रक्रिया कैसे चलाएं?


9

मेरे पास एक विंडोज सेवा (बांस एकीकरण सर्वर) है जो उस स्क्रिप्ट की उपप्रोसेस (एक बिल्ड जॉब) के रूप में एक बैच फ़ाइल चलाता है। उस बैच फ़ाइल के भीतर मैं एक प्रक्रिया शुरू करने में सक्षम होना चाहता हूं (चलो इसे कार्यकर्ताप्रकार। Exe कहते हैं) और उस प्रक्रिया को पृष्ठभूमि में चलाते हैं। यह सब अच्छा है, मैंने उपयोग किया है:

start "title" /B workerprocess.exe

वह सब अच्छा और अच्छा है। समस्या यह है कि यह तब बिल्ड जॉब को पूरा करता है। तो बैच स्क्रिप्ट खत्म हो जाती है, लेकिन क्योंकि कार्यकर्ताप्रोसेसर। Exprocess की वजह से, सेवा (बाँस) को यह नहीं पता है कि यह समाप्त हो गया है: यह अभी भी (के लिए उत्पादन से) प्रदर्शित करता है और उसके लिए इंतज़ार कर रहा है।

मैंने शुरुआत कमांड के लिए दस्तावेज में देखा है, और मैं कुछ भी नहीं देख सकता जो मुझे चाहिए। मैंने इस सवाल को देखा, लेकिन यह वास्तव में या तो मदद नहीं करता था - सेवा अभी भी समाप्त होने की प्रक्रिया का इंतजार कर रही है।

इसलिए मैं सारांश में अनुमान लगाता हूं: मैं एक बैच स्क्रिप्ट से एक नई प्रक्रिया कैसे चला सकता हूं ताकि यह पूरी तरह से अलग हो जाए और उस बैच स्क्रिप्ट के पूरा होने का इंतजार करने के लिए कुछ भी न हो।


1
क्या आपने इसे "/ B" पैरामीटर के बिना आज़माया है ताकि यह उसी कमांड विंडो के भीतर प्रक्रिया शुरू न करे?
जोश

@ जोश, कि चीजों को बदल दिया। सेवा अब प्रक्रिया से आउटपुट प्राप्त नहीं करती है, लेकिन इसके द्वारा अभी भी अवरुद्ध है।
जैक स्कॉट

जवाबों:


2

क्या आपने हिडन स्टार्ट (HSTART) की कोशिश की है ? (लागत $ 20)

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


जब मैंने सितंबर २०१३ में अपना उत्तर लिखा, तो उत्पाद चारों ओर से मुक्त था। अफसोस की बात है कि वे कीमत वसूल रहे हैं।
सूर्य

3

सभी लिंक किए गए स्क्रिप्ट डाउनलोड और सहेजे जा सकते हैं जो भी नाम आपको सुविधाजनक लगे।

1) IEXPRESS समाधान - तर्क के रूप में केवल आदेश और उसके तर्क स्वीकार करता है।

उदाहरण उपयोग:

call hidder.bat myBat.bat  myexe.exe
call myexe.exe

2) SCHTASKS - फिर से केवल दो तर्कों को स्वीकार करता है - कमांड और आर्ग्युमेंट्स। इसके अलावा चेक करता है कि क्या यह एलिवेटेड परमिशन के साथ शुरू हुआ है और यदि संभव हो तो WEVTUTIL कमांड के साथ प्रक्रिया की PID हो जाती है।

उदाहरण उपयोग:

call SCHPhidden.bat "cmd /c myBat.bat"  "argument"

3) 'WScript.Shell' - स्क्रिप्ट 'WScript.Shell' का पूर्ण आवरण है और हर संभव विकल्प कमांड लाइन विकल्पों के माध्यम से सेट किया जा सकता है। यह एक jscript / बैच हाइब्रिड है और इसे बल्ले के रूप में कहा जा सकता है।

उदाहरण का उपयोग (अधिक जानकारी के लिए '-h' की मदद से प्रिंट करें):

call ShellRunJS.bat "notepad.exe" -style 0 -wait no 

4) 'Win32_ProcessStartup' - फिर से फुल रैपर और सभी विकल्प कमांड लाइन आर्ग्युमेंट्स के माध्यम से उपलब्ध हैं। इस बार यह कुछ जावास्क्रिप्ट और कोड के कुछ VBScript टुकड़ों के साथ WSF / बैच हाइब्रिड है - लेकिन यह शुरू की गई प्रक्रिया की PID लौटाता है। प्रक्रिया आईडी छिपा नहीं है कुछ विकल्प जैसे X / Y निर्देशांक का उपयोग किया जा सकता है।

उदाहरण का उपयोग (अधिक जानकारी के लिए '-h' की मदद से प्रिंट करें)। यदि निष्पादन योग्य / लिपि में यह नहीं है तो इसके लिए पूर्ण पथ की आवश्यकता होगी %path%:

call win32process.bat "notepad" -arguments "/A openFile.txt"  -showWindow 0 -title "notepad"

5) द। नेट समाधान । ProcessStartInfo विकल्पों में से अधिकांश विकल्पों का उपयोग किया जाता है (लेकिन अंत में मैं सब कुछ शामिल करने के लिए बहुत थक गया था):

उदाहरण का उपयोग (अधिक जानकारी के लिए '-h' की मदद से प्रिंट करें):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal

लिंक नहीं मिला है
राहिल वज़ीर

@rahilwazir - संपादित
npocmaka

1
मैंने इन्हें थोड़ा सा आज़माया - मुझे लगता है कि विवरणों को एक महान सौदे को साफ करने की आवश्यकता है। बस पहला दृष्टिकोण देख: IExpress, लिंक hidder.bat है ऊपर दिए गए उदाहरण कुछ और का उपयोग करता है। जब मैंने स्क्रिप्ट चलाई, तो यह मुझसे एक EXE के लिए पूछने में विफल रहा, जिसका उल्लेख ऊपर नहीं किया गया है। यह ठीक हो सकता है अगर गिटहब पर मार्कडाउन होता, लेकिन ऐसा नहीं है। अंत में, इसे चलाने से कुछ .DDF फ़ाइलों का निर्माण हुआ, लेकिन कुछ और नहीं ....
जोज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.