मैंने दूसरे विषय को देखा और मुझे एक और समस्या हो रही है। प्रक्रिया शुरू हो रही है (कार्य प्रबंधक पर देखा गया है) लेकिन फ़ोल्डर मेरी स्क्रीन पर नहीं खुल रहा है। क्या गलत है?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
मैंने दूसरे विषय को देखा और मुझे एक और समस्या हो रही है। प्रक्रिया शुरू हो रही है (कार्य प्रबंधक पर देखा गया है) लेकिन फ़ोल्डर मेरी स्क्रीन पर नहीं खुल रहा है। क्या गलत है?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
जवाबों:
क्या आपने सुनिश्चित किया है कि फ़ोल्डर " 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");
यदि इनमें से कोई भी (अच्छी तरह से, एक अपवाद को छोड़कर) जो आपके कंप्यूटर पर काम करता है, तो मुझे नहीं लगता कि समस्या कोड में है, लेकिन पर्यावरण में है। अगर ऐसा है, तो मैं निम्नलिखित में से एक (या दोनों) की कोशिश करूंगा:
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\")
।
पूर्णता के लिए, यदि आप एक फ़ोल्डर खोलना चाहते हैं, तो इसका उपयोग करें:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
सुनिश्चित करें कि FileName के साथ समाप्त होता है Path.DirectorySeparatorChar
एक फ़ोल्डर में स्पष्ट रूप से इंगित करने के । (@Binki से साभार)
यह समाधान एक फ़ोल्डर खोलने और एक आइटम का चयन करने के लिए काम नहीं करेगा, क्योंकि इसके लिए कोई क्रिया नहीं लगती है।
C:\teste.exe
या C:\teste.cmd
मौजूद है, तो एक्सप्लोरर आपके इच्छित उद्देश्य के बजाय उस अन्य फ़ोल्डर में खुल जाएगा। इससे बचने के लिए, आप Path.DirectorySeparatorChar
पथ में संलग्न कर सकते हैं । देखें कि वीएस खुद एक ही गलती कैसे करता है ।
Verb = "select"
, लेकिन अफसोस कि आप नहीं कर सकते। भले ही, महान जवाब!
Verb = "open"
जरूरी नहीं थी। (विंडोज में परीक्षण किया गया है, अन्य ओएस भिन्न हो सकते हैं।)
.Verbs
प्रॉपर्टी से लागू क्रिया ProcessStartInfo
( docs.microsoft.com/en-us/dotnet/api/… ) पर प्राप्त कर सकते हैं
आप @ प्रतीक का उपयोग कर रहे हैं, जो आपके बैकस्लैश से बचने की आवश्यकता को दूर करता है।
@ निकालें या \\ की जगह \\
बिना तार के उपयोग के समय आपको डबल बैकस्लैश की आवश्यकता नहीं होती है:
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
आपको किसी एक का उपयोग करना चाहिए System.Diagnostics.Process.Start()
ओवरलोड में से । यह काफी सरल है!
यदि आप उस प्रक्रिया का फ़ाइल नाम नहीं रखते हैं जिसे आप चलाना चाहते हैं ( explorer.exe
), तो सिस्टम इसे एक मान्य फ़ोल्डर पथ के रूप में पहचान लेगा और इसे पहले से चल रही एक्सप्लोरर प्रक्रिया से संलग्न करने का प्रयास करेगा। इस स्थिति में, यदि फ़ोल्डर पहले से ही खुला है, तो एक्सप्लोरर कुछ नहीं करेगा।
यदि आप प्रक्रिया का फ़ाइल नाम रखते हैं (जैसा कि आपने किया था), सिस्टम प्रक्रिया के एक नए उदाहरण को चलाने की कोशिश करेगा, दूसरे स्ट्रिंग को एक पैरामीटर के रूप में पारित करेगा। यदि स्ट्रिंग एक मान्य फ़ोल्डर है, तो इसे नई बनाई गई प्रक्रिया पर खोला जाता है, यदि नहीं, तो नई प्रक्रिया कुछ भी नहीं करेगी।
मुझे नहीं पता कि किसी भी स्थिति में प्रक्रिया द्वारा अमान्य फ़ोल्डर पथ कैसे व्यवहार किए जाते हैं। उपयोग System.IO.Directory.Exists()
सुनिश्चित करने के लिए पर्याप्त होना चाहिए।
Path.DirectorySeparatorChar
। अन्यथा, यदि समान नाम वाला एक फ़ोल्डर, लेकिन .cmd
या .exe
संभवतः अन्य प्रत्यय भी मौजूद हैं, तो एक्सप्लोरर उस अन्य फ़ोल्डर में खुल जाएगा - या यदि वे वास्तव में निष्पादन योग्य या स्क्रिप्ट हैं, तो यह फ़ोल्डर को खोलने का बजाय आपको बताए अनुसार चलाएगा।
प्रक्रिया के एक अतिभारित संस्करण का उपयोग करें जो एक ProcessStartInfo उदाहरण लेता है और ProcessWindowStyle गुण को आपके लिए काम करने वाले मान पर सेट करता है।
जब आप साइन अप करते हैं तो आप बैकस्लैश से बच रहे होते हैं।
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
यह कोड VS2010 वातावरण से ठीक काम करता है और स्थानीय फ़ोल्डर को ठीक से खोलता है, लेकिन यदि आप IIS में उसी एप्लिकेशन को होस्ट करते हैं और खोलने का प्रयास करते हैं तो यह निश्चित रूप से विफल हो जाएगा।
Ive सिर्फ यह मुद्दा था, और मुझे पता चला क्यों। मेरे कारण यहाँ कोई और सूचीबद्ध नहीं है, जो इस मुद्दे को प्राप्त करता है और इनमें से कोई भी इसे ठीक नहीं करता है।
यदि आप विज़ुअल स्टूडियो को किसी अन्य उपयोगकर्ता के रूप में चलाते हैं और प्रक्रिया का उपयोग करने का प्रयास करते हैं। तो यह उस उपयोगकर्ता संदर्भ में चलेगा और आप इसे अपनी स्क्रीन पर नहीं देखेंगे।
अजीब।
यदि यह explorer.exe नहीं पा सकता है, तो आपको एक अपवाद मिलना चाहिए। यदि यह फ़ोल्डर नहीं मिल रहा है, तो यह अभी भी कुछ फ़ोल्डर खोलना चाहिए (जैसे मेरे दस्तावेज़)
आप कहते हैं कि एक्सप्लोरर की एक और कॉपी टास्कमैन में दिखाई देती है, लेकिन आप इसे देख नहीं सकते।
क्या यह संभव है कि यह ऑफस्क्रीन (यानी एक और मॉनीटर) खुल रहा है?
या आप किसी गैर-संवादात्मक सेवा में ऐसा कर रहे हैं?
क्या यह सही ढंग से खुलता है जब आप अपने प्रारंभ मेनू से "explorer.exe c: \ teste" चलाते हैं? आप कब से यह कोशिश कर रहे हैं? मैं एक समान व्यवहार देखता हूं जब मेरी मशीन में बहुत सारी प्रक्रियाएं होती हैं और जब मैं एक नई प्रक्रिया खोलता हूं (सेट कहता है IE) .. यह कार्य प्रबंधक में शुरू होता है लेकिन सामने के अंत में दिखाई नहीं देता है। क्या आपने पुनः आरंभ करने की कोशिश की है?
निम्न कोड को एक नया एक्सप्लोरर उदाहरण खोलना चाहिए
class sample{
static void Main()
{
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}
क्या आपके पास बहुत सारे अनुप्रयोग चल रहे हैं जब आप यह कोशिश कर रहे हैं? मुझे कभी-कभी काम में अजीब व्यवहार का सामना करना पड़ता है क्योंकि मेरा सिस्टम जीडीआई हैंडल से बाहर चला जाता है क्योंकि मेरे पास बहुत सारी खिड़कियां खुली हैं (हमारे ऐप बहुत उपयोग करते हैं)।
जब ऐसा होता है, तो विंडोज़ और संदर्भ मेनू तब तक दिखाई नहीं देते हैं जब तक कि मैं कुछ जीडीआई हैंडल को मुक्त करने के लिए कुछ बंद नहीं करता।
XP और Vista में डिफ़ॉल्ट सीमा 10000 है। मेरे DevStudio के लिए 1500 GDI हैंडल होना असामान्य नहीं है, इसलिए यदि आपके पास देव स्टूडियो की कुछ प्रतियां खुली हैं, तो यह उन्हें बहुत जल्दी खा सकता है। आप टास्कमैनगर में एक कॉलम जोड़कर देख सकते हैं कि प्रत्येक प्रक्रिया द्वारा कितने हैंडल का उपयोग किया जा रहा है।
एक रजिस्ट्री ट्विक है जो आप सीमा बढ़ाने के लिए कर सकते हैं।
अधिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/ms724291(VS.858.bx देखें