मैं WPF ऐप के भीतर से एक निश्चित निर्देशिका में विंडोज एक्सप्लोरर कैसे खोल सकता हूं?


150

WPF एप्लिकेशन में, जब कोई उपयोगकर्ता एक बटन पर क्लिक करता है तो मैं एक निश्चित निर्देशिका में विंडोज एक्सप्लोरर को खोलना चाहता हूं, मैं यह कैसे करूं?

मैं कुछ इस तरह की उम्मीद करूंगा:

Windows.OpenExplorer("c:\test");

जवाबों:


306

क्यों नहीं Process.Start(@"c:\test");?


9
नोट: आप इसका उपयोग अन्य अनुप्रयोगों को चलाने के लिए भी कर सकते हैं। Process.Start("calc.exe");कैलकुलेटर चलाएगा। आप इसे एक निष्पादन योग्य के लिए पूरा रास्ता दे सकते हैं और इसे चलाएंगे।
जेमी पेनी

1
LOL, हाँ, क्यों नहीं। अजीब बात है, मेरे सिर में Application.Run था, सर्वव्यापी प्रक्रिया के लिए नहीं मिल सका ।art और सोचा WPF मेरे साथ खेल रहा था।
हाबिल 3

9
नोट: यह अपवाद नहीं है अगर यह नहीं है। प्रक्रिया की कोशिश करें। तीखा ("एक्सप्लोरर", @ "c: \ test"); इसके बजाय, यदि आप अपवाद को संभालना नहीं चाहते हैं। यह एक डिफ़ॉल्ट विंडो खोलेगा। हालांकि, अपवाद को संभालना बेहतर होगा।
ताम्रपत्र

9
खबरदार कि अगर कोई दुर्भावनापूर्ण (या अनजान) वहां कोई भी स्ट्रिंग प्राप्त कर सकता है, तो वे किसी भी कार्यक्रम को निष्पादित करने में सक्षम होंगे। @amalgamate सुझाव अधिक सुरक्षित है, अन्यथा जांचें कि क्या पथ एक निर्देशिका है और यदि यह पहले मौजूद है।
ईसाई रोंडेउ

3
बीच एक और अंतर Start(dir)और Start("explorer.exe", dir)है कि पूर्व मौजूदा खिड़की ध्यान केंद्रित करने की स्मार्ट पर्याप्त होगी के लिए है dirअगर वहाँ एक है, जबकि बाद एक नई विंडो हर बार खुल जाता है।
डीएलएफ

13

यह काम करना चाहिए:

Process.Start(@"<directory goes here>")

या यदि आप प्रोग्राम / खुली फ़ाइलें और / या फ़ोल्डर चलाने के लिए एक विधि चाहते हैं:

private void StartProcess(string path)
{
    ProcessStartInfo StartInformation = new ProcessStartInfo();

    StartInformation.FileName = path;

    Process process = Process.Start(StartInformation);

    process.EnableRaisingEvents = true;
}

और फिर विधि को बुलाओ और कोष्ठक में या तो फ़ाइल और / या फ़ोल्डर की निर्देशिका या आवेदन का नाम डाल दिया। उम्मीद है कि इस मदद की!


12

आप उपयोग कर सकते हैं System.Diagnostics.Process.Start

या WinApi को सीधे निम्नलिखित की तरह कुछ के साथ उपयोग करें, जो explorer.exe लॉन्च करेगा। इसे आरंभिक निर्देशिका देने के लिए आप ShellExecute के चौथे पैरामीटर का उपयोग कर सकते हैं।

public partial class Window1 : Window
{
    public Window1()
    {
        ShellExecute(IntPtr.Zero, "open", "explorer.exe", "", "", ShowCommands.SW_NORMAL);
        InitializeComponent();
    }

    public enum ShowCommands : int
    {
        SW_HIDE = 0,
        SW_SHOWNORMAL = 1,
        SW_NORMAL = 1,
        SW_SHOWMINIMIZED = 2,
        SW_SHOWMAXIMIZED = 3,
        SW_MAXIMIZE = 3,
        SW_SHOWNOACTIVATE = 4,
        SW_SHOW = 5,
        SW_MINIMIZE = 6,
        SW_SHOWMINNOACTIVE = 7,
        SW_SHOWNA = 8,
        SW_RESTORE = 9,
        SW_SHOWDEFAULT = 10,
        SW_FORCEMINIMIZE = 11,
        SW_MAX = 11
    }

    [DllImport("shell32.dll")]
    static extern IntPtr ShellExecute(
        IntPtr hwnd,
        string lpOperation,
        string lpFile,
        string lpParameters,
        string lpDirectory,
        ShowCommands nShowCmd);
}

घोषणाएँ pinvoke.net वेबसाइट से आती हैं ।


1
हां, मुझे उन त्रुटियों का सामना करना पड़ रहा था, जो <हड़ताल> हड़ताल </ हड़ताल> btw शांत के बारे में नहीं जानते थे
एडवर्ड टंगू

1
जो, दुर्भाग्य से, केवल जवाब / सवालों में काम करता है, लेकिन टिप्पणियों में नहीं; ;-) मैंने अभी-अभी अपडेट किया है।
हाबिल

+1 मैं अन्य एप्लिकेशन लॉन्च करने के लिए इस कोड का उपयोग करूंगा, लेकिन Process.Start () बिल्कुल वही था जो मुझे चाहिए था।
एडवर्ड टंगुए नोव

जब आप q का उत्तर देने का प्रयास करते हैं तो यही होता है। एक 3AM: आप स्पष्ट याद आती है; ;-) वैसे भी, मुझे याद है कि मैं अक्सर ShellExecute का उपयोग करता हूं जब Process.Start वह नहीं करता जो मैं चाहता हूं (कुछ परिदृश्य हैं जो इसे संभाल नहीं सकते हैं)।
हाबिल

क्या आप (पहले दो वाक्यों के भीतर) ने कहा कि एक winforms आवेदन से काम करेगा, Application.Run ("explorer.exe") काम नहीं करता है। क्योंकि application.run एक स्ट्रिंग भी नहीं लेता है
बार्लोप

12
Process.Start("explorer.exe" , @"C:\Users");

मुझे इसका उपयोग करना था, टीजीटी डायर को निर्दिष्ट करने का दूसरा तरीका मेरे आवेदन के समाप्त होने पर एक्सप्लोरर विंडो को बंद कर देगा।


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