Bagaimana saya bisa membuka Windows Explorer ke direktori tertentu dari dalam aplikasi WPF?

150

Dalam aplikasi WPF, ketika pengguna mengklik tombol Saya ingin membuka Windows explorer ke direktori tertentu, bagaimana saya melakukannya?

Saya mengharapkan sesuatu seperti ini:

Windows.OpenExplorer("c:\test");
Edward Tanguay
sumber

Jawaban:

306

Mengapa tidak Process.Start(@"c:\test");?

Jamie Penney
sumber
9
Catatan: Anda dapat menggunakan ini untuk menjalankan aplikasi lain juga. Process.Start("calc.exe");akan menjalankan Kalkulator. Anda bisa memberikannya path lengkap ke executable dan itu akan menjalankannya.
Jamie Penney
1
LOL, ya, mengapa tidak. Lucu, punya Aplikasi. Berjalan di kepala saya, tidak bisa sampai ke Proses di mana-mana. Mulai dan berpikir WPF sedang bermain game dengan saya.
Abel
9
Catatan: Ini akan melempar pengecualian jika tidak ada. Coba Process.Start ("explorer", @ "c: \ test"); alih-alih, jika Anda tidak ingin menangani pengecualian. Ini akan membuka jendela default. Seringkali akan lebih baik untuk menangani pengecualian.
amalgamate
9
Berhati-hatilah bahwa jika seseorang jahat (atau tidak sadar) bisa mendapatkan string apa pun di sana, mereka akan dapat menjalankan program apa pun. Saran @amalgamate lebih aman, jika tidak periksa apakah path adalah direktori dan apakah ada sebelumnya.
Christian Rondeau
3
Perbedaan lain antara Start(dir)dan Start("explorer.exe", dir)adalah bahwa yang pertama akan cukup pintar untuk memfokuskan jendela yang ada dirjika ada, sementara yang kedua membuka jendela baru setiap saat.
dlf
13

Ini seharusnya bekerja:

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

Atau jika Anda ingin metode untuk menjalankan program / membuka file dan / atau folder:

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

    StartInformation.FileName = path;

    Process process = Process.Start(StartInformation);

    process.EnableRaisingEvents = true;
}

Dan kemudian memanggil metode dan di dalam tanda kurung masukkan direktori file dan / atau folder di sana atau nama aplikasi. Semoga ini bisa membantu!

Anthony Smyth
sumber
12

Anda bisa menggunakannya System.Diagnostics.Process.Start.

Atau gunakan WinApi langsung dengan sesuatu seperti berikut ini, yang akan meluncurkan explorer.exe. Anda dapat menggunakan parameter keempat untuk ShellExecute untuk memberikannya direktori awal.

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);
}

Deklarasi datang dari situs web pinvoke.net .

Abel
sumber
1
ya, saya mendapatkan kesalahan mengejar itu, tidak tahu tentang <strike> mogok </strike> btw cool
Edward Tanguay
1
yang, sayangnya, hanya berfungsi dalam jawaban / pertanyaan, tetapi tidak dalam komentar ;-). Saya baru saja memperbarui.
Abel
+1 Saya akan menggunakan kode ini untuk meluncurkan aplikasi lain, tetapi Process.Start () tepat seperti yang saya butuhkan.
Edward Tanguay
itulah yang terjadi ketika Anda mencoba menjawab q. 3:00: Anda melewatkan ;-) jelas Bagaimanapun, saya ingat saya sering menggunakan ShellExecute ketika Process.Start tidak seperti yang saya inginkan (ada beberapa skenario yang tidak bisa ditangani).
Abel
apa yang Anda (dalam dua kalimat pertama), dikatakan akan bekerja dari aplikasi winforms, Application.Run ("explorer.exe") tidak berfungsi. Karena application.run bahkan tidak mengambil string
barlop
12
Process.Start("explorer.exe" , @"C:\Users");

Saya harus menggunakan ini, cara lain hanya menentukan dir tgt akan menutup jendela explorer ketika aplikasi saya dihentikan.

MarkyMarksFunkyBunch
sumber
Satu-satunya jawaban saya tidak mendapatkan Access deniedpengecualian.
Matas Vaitkevicius