2008-12-26 8 views
11

मुझे क्या करना है सी # 2005 जीयूआई ऐप उपयोगकर्ता के अनुरोध पर एक .bat और कई VBScript फ़ाइलों को कॉल करें। छुट्टियों के अंत तक यह केवल एक स्टॉप-गैप समाधान है और मैं इसे सी # में लिख सकता हूं। मैं वीबीस्क्रिप्ट फ़ाइलों को बिना किसी समस्या के निष्पादित करने के लिए प्राप्त कर सकता हूं लेकिन मैं .bat फ़ाइल निष्पादित करने में असमर्थ हूं। जब मैं .bat फ़ाइल निष्पादित करने के लिए C# एप में "क्लिक" करता हूं तो एक डॉस विंडो खुलती है और बहुत तेज हो जाती है और परीक्षण .bat फ़ाइल निष्पादित नहीं होती है - "विंडोज़ आंतरिक या बाहरी कमांड के रूप में बैट को पहचान नहीं पाता है" त्रुटि है डॉस बॉक्स में वापस आ गया। अगर मैं बस .bat फ़ाइल को दोगुना-क्लिक करता हूं या इसे कमांड प्रॉम्प्ट से मैन्युअल रूप से चलाता हूं तो यह निष्पादित होता है। जब तक कोई उपयोगकर्ता इंटरैक्शन की आवश्यकता नहीं होती है तब तक मुझे चुपचाप निष्पादित करने के लिए .bat फ़ाइल की आवश्यकता होती है - यह स्क्रिप्ट नेटवर्क की मशीन पर फ़ोल्डरों के लिए 11k + फ़ाइलों की प्रतिलिपि बनाता है और कभी-कभी विंडोज़ "भूल जाती है" यदि गंतव्य फ़ाइल या निर्देशिका है और उपयोगकर्ता को यह बताने के लिए कहता है यह क्या है (यह एक अन्य मुद्दा है जो यहां चर्चा के लिए नहीं है ... कहने की जरूरत नहीं है कि मैं इससे नाराज हूं)।सी # विंडोज फॉर्म ऐप से .bat फ़ाइल निष्पादित करने के लिए कैसे करें?

तो मेरी सी # स्रोत में जहाँ तक मुझे इस है:

Process scriptProc = new Process(); 


     if (File.Exists("c:\\scripts\\batchfile1.bat")) 
     { 

      scriptProc.StartInfo.FileName = @"cscript"; 
      scriptProc.StartInfo.Arguments = ("cmd.exe", "/C C:\\scripts\\batchfile1.bat"); // Wacky psuedo code // 
      scriptProc.Start(); 
      scriptProc.WaitForExit(1500000); 
      scriptProc.Close(); 

     } 

     if (!File.Exists("c:\\scripts\\batchfile1.bat")) 
     { 
     } 

मुझे पता है कि इस कोड काम नहीं करता हूँ - लेकिन यह अनिवार्य रूप से है कि मैं क्या करना चाहते हैं। मैं जो देख रहा हूं वह है .bat फ़ाइलों के लिए ऐसा कुछ है। मुझे लगता है कि मुझे .bat चलाने के लिए cmd का उपयोग करने के लिए सिस्टम को बताना है। मुझे यह कैसे करना है इस नुकसान के कारण मुझे नुकसान हुआ है। मैंने इस site को चेक किया है जो सी # 2003 के लिए है। मेरे लिए बहुत मदद नहीं है क्योंकि मैं सी # के साथ बहुत हरा हूं।

संपादित करें: केविन के पोस्ट का उपयोग करके मैंने इसे फिर से प्रयास किया। उस पोस्ट से ही समाधान स्क्रिप्ट लेकिन मेरे लिए संशोधित के बाद से मैं की जरूरत नहीं है रीडायरेक्ट करने के लिए:

System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
      proc.StartInfo.FileName = "C:\\scripts\\batchfile1.bat"; 
      proc.StartInfo.RedirectStandardError = false; 
      proc.StartInfo.RedirectStandardOutput = false; 
      proc.StartInfo.UseShellExecute = false; 
      proc.Start(); 
      proc.WaitForExit(); 

उत्तर

11

यहाँ आप के लिए क्या देख रहे है:

Service hangs up at WaitForExit after calling batch file

यह करने के लिए के रूप में के बारे में सवाल है कि क्यों एक सेवा किसी फ़ाइल को निष्पादित नहीं कर सकती है, लेकिन यह ऐसा करने के लिए आवश्यक सभी कोड दिखाती है।

+3

ठीक है यह ऐसा लगता है। मैं इसे आज़माउंगा। साइडबार - कभी इच्छा है कि एमएस से प्रोग्रामिंग भाषाओं में लंबे नाम हों? गुगलिंग "सी #" ".bat" चरम पर व्यर्थ है। – wergeld

0

समस्या आप बैच फ़ाइल उपयोगकर्ता पूछ के बारे में आ रही है तो गंतव्य, एक फ़ोल्डर या फ़ाइल है अगर आप पहले से जवाब पता है, तो आप इस तरह के रूप ऐसा कर सकता है: यदि गंतव्य एक फाइल है

: गूंज एफ | [बैच फ़ाइल पथ]

यदि फ़ोल्डर: echo d | [बैच फ़ाइल पथ]

यह अनिवार्य रूप से बैच फ़ाइल के इनपुट में "गूंज" के बाद पत्र को पाइप करेगा।

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