पर कॉल करने के बाद WaitForExit पर सेवा लटकती है मेरे पास ऐसी सेवा है जो कभी-कभी बैच फ़ाइल को कॉल करती है। बैच फ़ाइल 5-10 सेकंड लेता है निष्पादित करने के लिए:बैच फ़ाइल
System.Diagnostics.Process proc = new System.Diagnostics.Process(); // Declare New Process
proc.StartInfo.FileName = fileName;
proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();
फ़ाइल मौजूद है और कोड काम करता है जब मैं इन-सांत्वना एक ही कोड चलाते हैं। हालांकि जब यह सेवा के अंदर चलता है, तो यह WaitForExit()
पर लटकता है। जारी रखने के लिए मुझे प्रक्रिया से बैच फ़ाइल को मारना होगा। (मुझे यकीन है कि फ़ाइल मौजूद है, क्योंकि मैं इसे प्रक्रिया सूची में देख सकता हूं।)
मैं इस लटकन को कैसे ठीक कर सकता हूं?
अद्यतन # 1:
केविन का कोड मुझे आउटपुट प्राप्त करने की अनुमति देता है। मेरी बैच फ़ाइलों में से एक अभी भी लटक रहा है।
"C: \ EnterpriseDB \ Postgres \ 8.3 \ बिन \ pg_dump.exe" मैं -h स्थानीय होस्ट -p 5432 यू postgres एफ पी -एक डी -v -f "c: \ backupcasecocher \ । backupdateevent2008.sql "आयकर" \ "सार्वजनिक \" \ "dateevent \" "" DbTest "
अन्य बैच फ़ाइल है:
" C: \ EnterpriseDB \ Postgres \ 8.3 \ बिन \ vacuumdb.exe "-U postgres -d डीबीटेस्ट
मैंने पथ की जांच की है और postgresql
पथ ठीक है। आउटपुट निर्देशिका मौजूद है और अभी भी सेवा के बाहर काम करता है। कोई विचार?
अद्यतन # 2: proc.StartInfo.FileName
के लिए और proc.StartInfo.Arguments
के सभी मापदंडों कहा:
बैच फ़ाइल का पथ के बजाय
, मैं "\ EnterpriseDB \ Postgres \ 8.3 \ बिन \ pg_dump.exe सी 'लिखा था। परिणाम अपरिवर्तित हैं, लेकिन मुझे प्रक्रिया विंडो में pg_dump.exe
दिखाई देता है। फिर यह केवल सेवा के अंदर होता है।
# 3 अद्यतन:
मैं सेवा व्यवस्थापक समूह में एक उपयोगकर्ता के साथ, कोई लाभ नहीं हुआ चल चुके हैं।
मैं एक साधारण सेवा बनाया ईवेंट लॉग में एक निशान लिख सकते हैं और एक बैच फ़ाइल है कि यह में "dir" शामिल हैं निष्पादित करने के लिए: मैं सेवा के उपयोगकर्ता नाम और पासवर्ड
अद्यतन # 4 के लिए null
बहाल। अब यह proc.Start();
पर लटका होगा - मैंने स्थानीय सिस्टम से खाता बदलने की कोशिश की है उपयोगकर्ता और मैंने प्रशासक उपयोगकर्ता और पासवर्ड सेट किया है, अभी भी कुछ नहीं।
proc.StartInfo.FileName = target;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
proc.WaitForExit
(
(timeout <= 0)
? int.MaxValue : timeout * NO_MILLISECONDS_IN_A_SECOND *
NO_SECONDS_IN_A_MINUTE
);
errorMessage = proc.StandardError.ReadToEnd();
proc.WaitForExit();
outputMessage = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
मैं अगर है कि आप के लिए चाल करना होगा पता नहीं है, लेकिन मैं इसे फांसी की समस्या नहीं है:
@nzpcmad: ओपी के टैग को बदलने का विचार आपको पृथ्वी पर कहां मिला? – GEOCHET
मैं nzpcmad नहीं हूं, लेकिन मेरा अनुमान है: चूंकि वह कहता है "मेरे पास एक webservice है", मुझे लगता है कि उसके पास एक वेब सेवा (.asmx) है और विंडोज सेवा नहीं है। –
@ माइकल: मैं नहीं देखता कि ओपी का टैग कैसे वारंट/बदल रहा है। – GEOCHET