Process.Start का उपयोग करके एक फ़ोल्डर खोलें


148

मैंने दूसरे विषय को देखा और मुझे एक और समस्या हो रही है। प्रक्रिया शुरू हो रही है (कार्य प्रबंधक पर देखा गया है) लेकिन फ़ोल्डर मेरी स्क्रीन पर नहीं खुल रहा है। क्या गलत है?

System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");

क्या आपको यकीन है कि आपका रास्ता सही है?
नाथन कोप

1
आप एक्सप्लोरर को मैन्युअल रूप से क्यों कॉल करना चाहते हैं? सिर्फ फ़ोल्डर ही क्यों न खोलें, अर्थात Process.Start को ProcessStartInfo के साथ UseShellExecute पर सेट करें, जो सत्य और क्रिया के लिए "ओपन" पर सेट है?
ओरेगॉनहोस्ट जूल

1
हां, मैंने पथ के बिना 'explorer.exe' खोलने की कोशिश की और काम भी नहीं किया।
डेनियल

खैर, मैंने पोस्ट नहीं किया क्योंकि सवाल यह नहीं है कि एक फ़ोल्डर कैसे खोलें, बल्कि एक फ़ोल्डर खोलने के लिए explorer.exe कैसे चलाएं। मैं सिर्फ यह जानना चाहता था कि आप खोजकर्ता को सीधे पहले स्थान पर क्यों आमंत्रित करना चाहते हैं, क्योंकि इसका कोई कारण हो सकता है;)
ओरेगॉनगॉस्ट

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

जवाबों:


266

क्या आपने सुनिश्चित किया है कि फ़ोल्डर " c:\teste" मौजूद है? यदि ऐसा नहीं होता है, तो खोजकर्ता कुछ डिफ़ॉल्ट फ़ोल्डर दिखाएगा (मेरे मामले में " C:\Users\[user name]\Documents")।

अपडेट करें

मैंने निम्नलिखित बदलावों की कोशिश की है:

// opens the folder in explorer
Process.Start(@"c:\temp");
// opens the folder in explorer
Process.Start("explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens explorer, showing some other folder)
Process.Start("explorer.exe", @"c:\does_not_exist");

यदि इनमें से कोई भी (अच्छी तरह से, एक अपवाद को छोड़कर) जो आपके कंप्यूटर पर काम करता है, तो मुझे नहीं लगता कि समस्या कोड में है, लेकिन पर्यावरण में है। अगर ऐसा है, तो मैं निम्नलिखित में से एक (या दोनों) की कोशिश करूंगा:

  • रन संवाद खोलें, "explorer.exe" दर्ज करें और एंटर दबाएं
  • कमांड प्रॉम्प्ट खोलें, "explorer.exe" टाइप करें और एंटर दबाएं

ठीक है, मुझे यकीन है और अगर यह मौजूद नहीं था, तो किसी भी तरह से कोई फ़ोल्डर खोलेगा, या नहीं?
डैनियल

ठीक है, तो यह पर्यावरण की समस्या हो सकती है .. मैंने explorer.exe को cmd के माध्यम से खोला और सामान्य रूप से खोला .. कोई भी प्रक्रिया नहीं। Sart ने 'Process.Start (@ "c: \ does_not_exist") को छोड़कर काम किया;' यह एक अपवाद है
डैनियल

1
छोटा अंतर अगर उस खोजकर्ता की खिड़की पहले से ही खुली है: खिड़की को Process.Start(path) सक्रिय करता है (केवल कार्य पट्टी में झपकी हो सकती है, सामने नहीं लाया जा सकता); explorer.exe+ पैरामीटर हमेशा सामने एक नई विंडो खोलता है (लेकिन कई बार एक ही विंडो)। इसलिए दोनों के पास कैविएट हैं।
कीकूसेमऊ

Process.Start(@"c:\temp")सावधानी के साथ इस्तेमाल किया जाना चाहिए। यदि c:\temp.comमौजूद है, तो c:\temp.comइसके बजाय फ़ंक्शन कॉल खुलेगी । अधिक विवरणों के लिए forum.iis.net/p/1239773/2144186.aspx देखें ।
लेक्स ली

ध्यान दें कि Process.Start(@"c:\temp")एक अलग फ़ोल्डर जैसे कि C:\temp.exeया खोलने के लिए अतिसंवेदनशील है C:\temp.cmdइस मुद्दे को देखें जहां वीएस खुद छोटी गाड़ी के व्यवहार को प्रदर्शित करता है । आप या तो explorer.exeवेरिएंट या (बेहतर, IMO) का उपयोग करके इससे बच सकते हैं Path.DirectorySeparatorChar। उदाहरण के लिए, Process.Start(@"C:\temp\")
binki

46

पूर्णता के लिए, यदि आप एक फ़ोल्डर खोलना चाहते हैं, तो इसका उपयोग करें:

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
    FileName = "C:\\teste\\",
    UseShellExecute = true,
    Verb = "open"
});

सुनिश्चित करें कि FileName के साथ समाप्त होता है Path.DirectorySeparatorChar एक फ़ोल्डर में स्पष्ट रूप से इंगित करने के । (@Binki से साभार)

यह समाधान एक फ़ोल्डर खोलने और एक आइटम का चयन करने के लिए काम नहीं करेगा, क्योंकि इसके लिए कोई क्रिया नहीं लगती है।


यह मेरे लिए, विंडोज पर और मोनो पर मोनो का उपयोग करके लिनक्स पर काम करता है।
मेंनो डीज - वैन रिजेविज्क

1
यदि आप इस विधि और एक फ़ोल्डर का उपयोग करते हैं जैसे कि मौजूद C:\teste.exeया C:\teste.cmdमौजूद है, तो एक्सप्लोरर आपके इच्छित उद्देश्य के बजाय उस अन्य फ़ोल्डर में खुल जाएगा। इससे बचने के लिए, आप Path.DirectorySeparatorCharपथ में संलग्न कर सकते हैं । देखें कि वीएस खुद एक ही गलती कैसे करता है
binki

"/ चयन" का उपयोग करके @ दृश्य के उत्तर को देखते हुए, आपको लगता है कि आप उपयोग कर सकते हैं Verb = "select", लेकिन अफसोस कि आप नहीं कर सकते। भले ही, महान जवाब!
इडबरी जूल

1
यह मेरे लिए .NET कोर 3 में काम करता है, उपरोक्त स्वीकृत उत्तर के विपरीत। सेटिंग Verb = "open"जरूरी नहीं थी। (विंडोज में परीक्षण किया गया है, अन्य ओएस भिन्न हो सकते हैं।)
वॉल्ट डी

आप .Verbsप्रॉपर्टी से लागू क्रिया ProcessStartInfo( docs.microsoft.com/en-us/dotnet/api/… ) पर प्राप्त कर सकते हैं
GaryNg

16

यदि आप फ़ाइल या फ़ोल्डर का चयन करना चाहते हैं, तो आप निम्नलिखित का उपयोग कर सकते हैं:

Process.Start("explorer.exe", "/select, c:\\teste");

2
चुनने के बजाय एक फ़ोल्डर खोलने के लिए इसे बस बदल /selectदें/open
सुशीगू

5

आप @ प्रतीक का उपयोग कर रहे हैं, जो आपके बैकस्लैश से बचने की आवश्यकता को दूर करता है।

@ निकालें या \\ की जगह \\


अभी भी फोल्डर नहीं खुल रहा है .. केवल प्रक्रिया @ टास्क मैनेजर शुरू कर रहा है
डैनियल

मेरे पास कोई और सुझाव नहीं है, मैं विजुअल C # एक्सप्रेस 2008 में परीक्षण करने और इसे बनाने में सक्षम था
केविन लाईट

1
मैं कहूंगा ... ज़ेबरा। आपके खोजकर्ता के साथ कुछ गड़बड़ है, शायद कुंवारी या कुछ और ...
आर। मार्टिनो फर्नांडीस

4

बिना तार के उपयोग के समय आपको डबल बैकस्लैश की आवश्यकता नहीं होती है:

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");

3

आपको किसी एक का उपयोग करना चाहिए System.Diagnostics.Process.Start() ओवरलोड में से । यह काफी सरल है!

यदि आप उस प्रक्रिया का फ़ाइल नाम नहीं रखते हैं जिसे आप चलाना चाहते हैं ( explorer.exe), तो सिस्टम इसे एक मान्य फ़ोल्डर पथ के रूप में पहचान लेगा और इसे पहले से चल रही एक्सप्लोरर प्रक्रिया से संलग्न करने का प्रयास करेगा। इस स्थिति में, यदि फ़ोल्डर पहले से ही खुला है, तो एक्सप्लोरर कुछ नहीं करेगा।

यदि आप प्रक्रिया का फ़ाइल नाम रखते हैं (जैसा कि आपने किया था), सिस्टम प्रक्रिया के एक नए उदाहरण को चलाने की कोशिश करेगा, दूसरे स्ट्रिंग को एक पैरामीटर के रूप में पारित करेगा। यदि स्ट्रिंग एक मान्य फ़ोल्डर है, तो इसे नई बनाई गई प्रक्रिया पर खोला जाता है, यदि नहीं, तो नई प्रक्रिया कुछ भी नहीं करेगी।

मुझे नहीं पता कि किसी भी स्थिति में प्रक्रिया द्वारा अमान्य फ़ोल्डर पथ कैसे व्यवहार किए जाते हैं। उपयोग System.IO.Directory.Exists()सुनिश्चित करने के लिए पर्याप्त होना चाहिए।


यह मत भूलो कि आपको संलग्न करने की आवश्यकता है Path.DirectorySeparatorChar। अन्यथा, यदि समान नाम वाला एक फ़ोल्डर, लेकिन .cmdया .exeसंभवतः अन्य प्रत्यय भी मौजूद हैं, तो एक्सप्लोरर उस अन्य फ़ोल्डर में खुल जाएगा - या यदि वे वास्तव में निष्पादन योग्य या स्क्रिप्ट हैं, तो यह फ़ोल्डर को खोलने का बजाय आपको बताए अनुसार चलाएगा।
Binki

1

प्रक्रिया के एक अतिभारित संस्करण का उपयोग करें जो एक ProcessStartInfo उदाहरण लेता है और ProcessWindowStyle गुण को आपके लिए काम करने वाले मान पर सेट करता है।


1

जब आप साइन अप करते हैं तो आप बैकस्लैश से बच रहे होते हैं।

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");

1
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste"); 

यह कोड VS2010 वातावरण से ठीक काम करता है और स्थानीय फ़ोल्डर को ठीक से खोलता है, लेकिन यदि आप IIS में उसी एप्लिकेशन को होस्ट करते हैं और खोलने का प्रयास करते हैं तो यह निश्चित रूप से विफल हो जाएगा।


1

Ive सिर्फ यह मुद्दा था, और मुझे पता चला क्यों। मेरे कारण यहाँ कोई और सूचीबद्ध नहीं है, जो इस मुद्दे को प्राप्त करता है और इनमें से कोई भी इसे ठीक नहीं करता है।

यदि आप विज़ुअल स्टूडियो को किसी अन्य उपयोगकर्ता के रूप में चलाते हैं और प्रक्रिया का उपयोग करने का प्रयास करते हैं। तो यह उस उपयोगकर्ता संदर्भ में चलेगा और आप इसे अपनी स्क्रीन पर नहीं देखेंगे।


0

अजीब।

यदि यह explorer.exe नहीं पा सकता है, तो आपको एक अपवाद मिलना चाहिए। यदि यह फ़ोल्डर नहीं मिल रहा है, तो यह अभी भी कुछ फ़ोल्डर खोलना चाहिए (जैसे मेरे दस्तावेज़)

आप कहते हैं कि एक्सप्लोरर की एक और कॉपी टास्कमैन में दिखाई देती है, लेकिन आप इसे देख नहीं सकते।

क्या यह संभव है कि यह ऑफस्क्रीन (यानी एक और मॉनीटर) खुल रहा है?

या आप किसी गैर-संवादात्मक सेवा में ऐसा कर रहे हैं?


मेरे पास केवल 1 मॉनिटर है, और "आप कहते हैं कि एक्सप्लोरर की एक और कॉपी टास्कमैनर में दिखाई देती है, लेकिन आप इसे देख नहीं सकते हैं।" यह सही है .. मुझे नहीं पता कि आपका क्या मतलब है "या आप किसी भी तरह से गैर-इंटरैक्टिव सेवा में ऐसा कर रहे हैं?"
डैनियल

मेरा मतलब था कि अगर आप जो प्रोग्राम लिख रहे हैं, वह एक सामान्य विफॉर्मफॉर्म प्रोग्राम के विपरीत एक सेवा है (जो पूरी तरह से पृष्ठभूमि में चलती है)। (यदि आप नहीं जानते कि सेवा क्या है, तो यह संभव नहीं है कि आप एक लिख रहे हों)। यदि आप इस छिपे हुए एक्सप्लोरर विंडो पर 'स्विच टू', 'फ्रंट टू फ्रंट' या 'मैक्सिमम' चुनते हैं, तो क्या यह दिखाई देता है?
16:15 बजे sgmoore

0

क्या यह सही ढंग से खुलता है जब आप अपने प्रारंभ मेनू से "explorer.exe c: \ teste" चलाते हैं? आप कब से यह कोशिश कर रहे हैं? मैं एक समान व्यवहार देखता हूं जब मेरी मशीन में बहुत सारी प्रक्रियाएं होती हैं और जब मैं एक नई प्रक्रिया खोलता हूं (सेट कहता है IE) .. यह कार्य प्रबंधक में शुरू होता है लेकिन सामने के अंत में दिखाई नहीं देता है। क्या आपने पुनः आरंभ करने की कोशिश की है?

निम्न कोड को एक नया एक्सप्लोरर उदाहरण खोलना चाहिए

class sample{

static void Main()
{
  System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}

0

क्या आपके पास बहुत सारे अनुप्रयोग चल रहे हैं जब आप यह कोशिश कर रहे हैं? मुझे कभी-कभी काम में अजीब व्यवहार का सामना करना पड़ता है क्योंकि मेरा सिस्टम जीडीआई हैंडल से बाहर चला जाता है क्योंकि मेरे पास बहुत सारी खिड़कियां खुली हैं (हमारे ऐप बहुत उपयोग करते हैं)।

जब ऐसा होता है, तो विंडोज़ और संदर्भ मेनू तब तक दिखाई नहीं देते हैं जब तक कि मैं कुछ जीडीआई हैंडल को मुक्त करने के लिए कुछ बंद नहीं करता।

XP और Vista में डिफ़ॉल्ट सीमा 10000 है। मेरे DevStudio के लिए 1500 GDI हैंडल होना असामान्य नहीं है, इसलिए यदि आपके पास देव स्टूडियो की कुछ प्रतियां खुली हैं, तो यह उन्हें बहुत जल्दी खा सकता है। आप टास्कमैनगर में एक कॉलम जोड़कर देख सकते हैं कि प्रत्येक प्रक्रिया द्वारा कितने हैंडल का उपयोग किया जा रहा है।

एक रजिस्ट्री ट्विक है जो आप सीमा बढ़ाने के लिए कर सकते हैं।

अधिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/ms724291(VS.858.bx देखें


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