2011-02-23 7 views

उत्तर

66

सामान्य रूप से किया जाता है के रूप में हंस ने कहा, WindowStyle है प्रक्रिया को पारित एक सिफारिश, आवेदन इसे अनदेखा करना चुन सकता है।

CreateNoWindow नियंत्रित करता है कि कंसोल बाल प्रक्रिया के लिए कैसे काम करता है, लेकिन यह अकेले काम नहीं करता है। (नए कंसोल)

ProcessStartInfo info = new ProcessStartInfo(fileName, arg); 
info.CreateNoWindow = true; 
info.UseShellExecute = false; 
Process processChild = Process.Start(info); 

अपने आप विंडो में बच्चे प्रक्रिया चलाने के लिए

ProcessStartInfo info = new ProcessStartInfo(fileName, arg); 
info.UseShellExecute = true; // which is the default value. 
Process processChild = Process.Start(info); // separate window 
: इस प्रकार

CreateNoWindow UseShellExecute साथ संयोजन के रूप में काम करता है:

किसी भी खिड़की के बिना प्रक्रिया को चलाने के लिए

अभिभावक की कंसोल विंडो में बाल प्रक्रिया को चलाने के लिए

ProcessStartInfo info = new ProcessStartInfo(fileName, arg); 
info.UseShellExecute = false; // causes consoles to share window 
Process processChild = Process.Start(info); 
+17

यहां ध्यान देने योग्य एक बात यह है कि मैंने कड़ी मेहनत सीखी: यदि आप कोई प्रक्रिया बनाते हैं और फिर स्टार्टइन्फो को संशोधित करते हैं, तो आप एक प्रोसेस स्टार्टइन्फो बनाने के लिए एक अलग व्यवहार प्राप्त करेंगे और फिर उपयोग करें Process.Start()। विशेष रूप से, पूर्व CreateNoWindow का सम्मान नहीं करता है। –

+2

@AriRoth क्या आप एक कोड उदाहरण दे सकते हैं? इससे पहले कि आप अपनी StartInfo को संशोधित कर सकें, आपको एक प्रक्रिया बनाना है। कोई हमेशा प्रक्रिया 1 कह रहा होगा। स्टार्टइन्फो = कुछ। इसलिए आपको पहले प्रक्रिया बनाना है, और उसके बाद ProcessStartInfo का उदाहरण जिसे आप प्रक्रिया 1 को असाइन करते हैं। स्टार्टइन्फो कुछ और करना असंभव है। – barlop

+0

@ एरियोथ और यहां तक ​​कि यदि आप प्रक्रिया प्रक्रिया के बजाय प्रक्रिया प्रक्रिया = प्रक्रिया। स्टार्ट (एसएसआई) करते हैं;प्रारंभ करें() 'मुझे विश्वास नहीं है कि व्यवहार का कोई अंतर है और आप प्रक्रिया बनाने से पहले स्टार्टइन्फो को अभी भी सेट कर रहे हैं। – barlop

16

CreateNoWindow केवल कंसोल मोड ऐप्स पर लागू होता है, यह कंसोल विंडो नहीं बनाएगा।

विंडो स्टाइल केवल मूल विंडोज जीयूआई ऐप्स पर लागू होता है। यह इस तरह के एक कार्यक्रम के WinMain() entry point को पारित एक संकेत है। चौथा तर्क, एनसीएमडी शो, यह बताता है कि इसकी मुख्य विंडो कैसे दिखाना है। यह वही संकेत है जो डेस्कटॉप शॉर्टकट में "रन" सेटिंग के रूप में दिखाई देता है। ध्यान दें कि "छिपी हुई" एक विकल्प नहीं है, कुछ उचित ढंग से डिज़ाइन किए गए विंडोज प्रोग्राम सम्मान का अनुरोध करते हैं। चूंकि उस स्नूकर उपयोगकर्ता को, वह अब प्रोग्राम को सक्रिय नहीं कर सकता है और केवल टास्क मैनेजर के साथ इसे मार सकता है।

11

परावर्तक का उपयोग करके, ऐसा लगता है कि WindowStyle का उपयोग किया जाता है यदि UseShellExecute सेट है, अन्यथा यह CreateNoWindow का उपयोग करता है।

MSDN के उदाहरण में, आप देख सकते हैं कि वे यह सेट:

// Using CreateNoWindow requires UseShellExecute to be false 
myProcess.StartInfo.UseShellExecute = false; 
// You can start any process, HelloWorld is a do-nothing example. 
myProcess.StartInfo.FileName = "C:\\HelloWorld.exe"; 
myProcess.StartInfo.CreateNoWindow = true; 
myProcess.Start(); 

अन्य उदाहरण में, इसकी सिर्फ इसलिए नीचे UseShellExecute सच

// UseShellExecute defaults to true, so use the WindowStyle 
ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe"); 
startInfo.WindowStyle = ProcessWindowStyle.Minimized; 
+0

मैं सहमत हूं, जो मेरे परीक्षण से भी सहमत हैं। क्या एमएसडीएन ने इसे पीछे की ओर ले लिया है? https://msdn.microsoft.com/en-us/library/system.diagnostics.processwindowstyle(v=vs.110).aspx वे कहते हैं "ProcessWindowStyle.Hidden का उपयोग करने के लिए, ProcessStartInfo.UseShellExecute गुण गलत होना चाहिए।" <- मेरा मानना ​​है कि एमएसडीएन के पास यह पीछे है – barlop

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