कंसोल विंडो को Process.Start C # से छुपाएं


102

मैं System.Diagnostics.Process क्लास का उपयोग करके एक रिमोट मशीन पर प्रक्रिया बनाने की कोशिश कर रहा हूं। मैं एक प्रक्रिया बनाने में सक्षम हूं। लेकिन समस्या यह है कि, एक सेवा बनाने में एक लंबा समय लगता है और कंसोल विंडो प्रदर्शित होती है। एक और कष्टप्रद बात यह है कि मेरे विंडो फॉर्म के शीर्ष पर कंसोल विंडो प्रदर्शित होती है और मैं उस फॉर्म पर कोई अन्य ऑपरेशन नहीं कर सकता। मैंने सभी गुण सेट किए हैं जैसे CreateNoWindow = true,

proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden

लेकिन फिर भी यह कंसोल विंडो को दिखाता है। यहां तक ​​कि मैं स्ट्रीम को अलग करने के लिए आउटपुट और त्रुटियों को पुनर्निर्देशित करता हूं लेकिन कोई भाग्य नहीं।

क्या कंसोल विंडो को छिपाने का कोई अन्य तरीका है? कृपया मेरी मदद करें ।

यहाँ मेरे कोड का एक हिस्सा है जिसका इस्तेमाल मैंने sc कमांड को निष्पादित करने के लिए किया है।

Process proc = new Process();
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.FileName = "sc";
proc.StartInfo.Arguments = string.Format(@"\\SYS25 create MySvc binPath= C:\mysvc.exe");
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();

क्या आपने सेटिंग करने की कोशिश की है proc.StartInfo.RedirectedStandardOutput = true? मैंने एक विंडोज एप्लीकेशन के साथ काम करने के लिए इसे प्राप्त किया है।
पोय

पूर्ण स्रोत कोड नमूने के साथ कोई अंतिम समाधान इसके बारे में काम कर रहा है?
किनिकेत

Windows कंसोल ऐप में, बस UseShellExecute - w / o पुनर्निर्देशन या कुछ और सेट करना - मेरे लिए काम किया। देखें यहाँ
पॉल

जहाँ तक कंसोल विंडो खोलने और फ़ॉर्म को लॉक करने की बात है, आपको प्रक्रिया को टास्क के रूप में या नए थ्रेड पर चलाना चाहिए
Ryan Dooley

तुम क्यों तय कर रहे हैं UseShellExecuteऔर CreateNoWindowदो बार?
माइक लोरी

जवाबों:


119

कंसोल विंडो को दिखाए बिना प्रक्रिया शुरू करने का प्रयास करते समय मेरे पास एक समान मुद्दा था। मैंने संपत्ति मूल्यों के कई अलग-अलग संयोजनों के साथ परीक्षण किया जब तक कि मुझे एक ऐसा नहीं मिला जो मेरे द्वारा किए गए व्यवहार को प्रदर्शित करता है।

यहां एक पृष्ठ का विवरण दिया गया है कि UseShellExecuteसंपत्ति को झूठी क्यों सेट किया जाना चाहिए।
http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.createnowindow.aspx

पृष्ठ पर टिप्पणी अनुभाग के तहत:

यदि UseShellExecute गुण सत्य है या उपयोगकर्ता नाम और पासवर्ड गुण शून्य नहीं हैं, तो CreateNoWindow गुण मान पर ध्यान नहीं दिया जाता है और एक नई विंडो बनाई जाती है।

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = fullPath;
startInfo.Arguments = args;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;

Process processTemp = new Process();
processTemp.StartInfo = startInfo;
processTemp.EnableRaisingEvents = true;
try
{
    processTemp.Start();
}
catch (Exception e)
{
    throw;
}

2
कुछ अतिरिक्त विवरण जोड़ने के लिए देखभाल? क्यों इस के बजाय काम करता है कैसे
एक्वा

2
क्या यह इसलिए है क्योंकि मानक आउटपुट विंडो को अस्तित्व में लाने के लिए मजबूर कर रहा है?
डेनिस स्किडमोर

1
और स्पष्ट रूप से आप सेटिंग के बिना मानक आउटपुट को पुनर्निर्देशित नहीं कर सकतेstartInfo.UseShellExecute = false;
डेनिस स्किडमोर

1
मैं उत्सुक हूं कि, इस अन्य उत्तर में उन्होंने UseShellExecute = true का उपयोग किया? stackoverflow.com/questions/2317767/c-process-start-hide
डेनिस स्किडमोर

10
मैं कभी नहीं समझ पाऊंगा कि लोग एक अपवाद को क्यों पकड़ते हैं जो वे वैसे भी फिर से फेंक रहे हैं।
Blindy

54

मेरे पास इस उत्तर के साथ बुरा भाग्य है, इस प्रक्रिया के साथ (Wix light.exe) अनिवार्य रूप से दोपहर के भोजन के लिए बाहर जा रहा है और रात के खाने के लिए समय पर घर नहीं आ रहा है। हालाँकि, निम्नलिखित ने मेरे लिए अच्छा काम किया:

Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
// etc, then start process

2
मेरे लिए काम किया - अच्छा और सरल!
J c

2
यह वास्तव में स्वीकृत उत्तर होना चाहिए। एक जादू की तरह काम करता है।
शाश्वत

2
CreateNoWindow = trueमेरे लिए काम नहीं किया, यह किया :)
स्टीफन Monov

3
यह केवल विंडो के साथ आवेदन के लिए काम करता है, कंसोल एप्लिकेशन अभी भी विंडो दिखाता है
जियोग्राफ़

18

यह काम करना चाहिए, प्रयास करना चाहिए;


एक सिस्टम संदर्भ जोड़ें।

using System.Diagnostics;

फिर इस कोड का उपयोग अपने कमांड को hiden CMD विंडो में चलाने के लिए करें।

Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.Arguments = "Enter your command here";
cmd.Start();

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.