2008-09-30 10 views
5

मैं एक शेड्यूलर या प्रकार लिख रहा हूं। यह मूल रूप से exes की सूची वाली एक तालिका है (जैसे "सी: \ a.exe") और एक कंसोल ऐप जो हर मिनट या तो तालिका में रिकॉर्ड्स को देखता है और उन कार्यों को चलाता है जो अभी तक नहीं चल रहे हैं।मैं कैसे बता सकता हूं कि .NET System.Diagnostics.Process सफलतापूर्वक भाग गया या विफल रहा?

System.Diagnostics.Process p = new System.Diagnostics.Process(); 
p.StartInfo.UseShellExecute = false; 
p.StartInfo.FileName = someExe; // like "a.exe" 
p.Start(); 

मैं अगर किसी विशेष कार्य में विफल रहा है कैसे बता सकते हैं:

मैं इस तरह के कार्यों को चलाने के? उदाहरण के लिए यदि a.exe एक अनचाहे अपवाद फेंकता है तो क्या होगा? मैं उपरोक्त कोड को यह जानना चाहता हूं कि यह कब होता है और कार्य तालिका को "विशेष कार्य विफल" आदि जैसे कुछ अपडेट करें।

मैं यह कैसे कर सकता हूं?

मैं एसक्यूएल एजेंट या विंडोज शेड्यूलर का उपयोग नहीं कर रहा हूं क्योंकि किसी और ने मुझे नहीं बताया है। उसके पास अधिक "अनुभव" है इसलिए मैं मूल रूप से केवल आदेशों का पालन कर रहा हूं। विकल्पों का सुझाव देने के लिए स्वतंत्र महसूस करें।

उत्तर

8

आप Win32Exception को देख सकते हैं कि यह जांचने के लिए कि Process.Start() फ़ाइल मौजूद नहीं है या फ़ाइल निष्पादित करने के कारण विफल रहा है।

लेकिन आप इस वर्ग का उपयोग करके बनाई गई प्रक्रियाओं द्वारा फेंकने वाले अपवादों को नहीं पकड़ सकते हैं। सबसे पहले, एप्लिकेशन .NET में लिखा नहीं जा सकता है, इसलिए अपवाद की अवधारणा बिल्कुल नहीं हो सकती है।

आप क्या कर सकते हैं आवेदन के ExitCode पर जांचें या StandardOutput और StandardError स्ट्रीम पढ़ें ताकि यह जांच सके कि त्रुटि संदेश पोस्ट किए जा रहे हैं या नहीं।

5

मुझे लगता है कि आप Process.ExitCode की तलाश में हैं, मानते हैं कि प्रक्रिया एक लौटाती है। हालांकि आपको WaitForExit() का उपयोग करने की आवश्यकता हो सकती है। एक त्रुटि डेटाटाइसेव इवेंट भी है जो एक ऐप स्टेडर पर भेजता है जब ट्रिगर होता है।

+0

इस उदाहरण के लिए http://msdn.microsoft.com/en-us/library/system.diagnostics.process.exitcode.aspx देखें। – marcj

2

ExitCode के अलावा, तुम भी कुछ इस तरह कर सकते हैं:

string output = p.StandardOutput.ReadToEnd(); 

कि सब कुछ है कि एक कमांड विंडो लिए लिखा गया है पर कब्जा होगा। फिर आप ऐप के आधार पर त्रुटियों को प्रदर्शित करने के लिए ज्ञात पैटर्न के लिए उस स्ट्रिंग को पार्स कर सकते हैं।

+0

आपको इसका उपयोग करके डेडलॉक स्थितियों से सावधान रहना होगा! http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardoutput.aspx – hova

0

@jop ने जो कहा, उस पर विस्तार करने के लिए। प्रक्रिया को बंद करने के लिए आपको भी इंतजार करना होगा। इस प्रकार:

 p.Start(); 
     p.WaitForExit(); 
     int returnCode = p.ExitCode; 

गैर-शून्य कोड आमतौर पर त्रुटियां होती हैं। नकारात्मक अनुप्रयोगों का उपयोग करने वाले कुछ अनुप्रयोग त्रुटियां हैं, और पॉजिटिव वाले स्टेटस कोड/चेतावनियां हैं।

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

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