2009-07-15 14 views
108

मैंने other topic देखा और मुझे एक और समस्या है। प्रक्रिया शुरू हो रही है (टास्क मैनेजर पर देखा गया) लेकिन फ़ोल्डर मेरी स्क्रीन पर नहीं खुल रहा है। क्या गलत है?प्रक्रिया का उपयोग कर एक फ़ोल्डर खोलें। स्टार्ट

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

क्या आप वाकई अपना रास्ता सही हैं? –

+1

आप मैन्युअल रूप से एक्सप्लोरर को क्यों कॉल करना चाहते हैं? क्यों न केवल फ़ोल्डर खोलें, यानी कॉल प्रक्रिया। ProcSStllExecute के साथ ProcessStartInfo के साथ प्रारंभ करें और Verb "open" पर सेट है? – OregonGhost

+1

हां, मैंने पथ के बिना 'explorer.exe' खोलने का प्रयास किया और या तो काम नहीं किया। – Daniel

उत्तर

189

क्या आपने यह सुनिश्चित किया है कि फ़ोल्डर "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" डालें और enter
  • खुला एक कमांड प्रॉम्प्ट, प्रकार "एक्सप्लोरर मारा। exe "और हिट दर्ज करें
+0

अच्छा, मुझे यकीन है और यदि यह अस्तित्व में नहीं था, तो क्या कोई फ़ोल्डर उसी तरह से खुल जाएगा, या नहीं? – Daniel

+0

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

+1

छोटा अंतर अगर वह एक्सप्लोरर विंडो पहले से ही खुला है: 'प्रक्रिया। स्टार्ट (पथ)' विंडो को सक्रिय करता है (केवल टास्क बार में झपकी दे सकता है, सामने नहीं लाया जा सकता है); 'explorer.exe' + पैरामीटर हमेशा सामने में एक नई विंडो खुलता है (लेकिन एक ही विंडो में कई बार)। तो दोनों में चेतावनी है। – KekuSemau

4

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

निकालें @ या \

+0

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

+0

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

+0

में काम करने में सक्षम था, मैं कहूंगा ... ज़ेबरा। आपके एक्सप्लोरर में कुछ गड़बड़ है, शायद virii या कभी ... –

3

के साथ बदलें \\ जब नहीं छोड़ा जाएगा तार का उपयोग कर आप डबल बैकस्लैश की जरूरत नहीं है:

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

आप बैकस्लैश से बचने कर रहे हैं जब संकेत पर के लिए करता है आप।

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

विधि है कि एक ProcessStartInfo उदाहरण लेता है की एक ओवरलोड संस्करण का उपयोग करें और एक मूल्य है कि आप के लिए काम करता है के लिए ProcessWindowStyle गुण सेट।

0

अजीब।

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

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

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

या क्या आप किसी गैर-इंटरैक्टिव सेवा में ऐसा करने के किसी भी मौके से हैं?

+0

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

+0

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

25

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

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

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

+0

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

0

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

निम्नलिखित कोड एक नया अन्वेषक उदाहरण

class sample{ 

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

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

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

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

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

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

3

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

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

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

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

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

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

0

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

बस मार्ग बदलने के लिए या एक string

9

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

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

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

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

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