Windows Gezgini'ni WPF uygulamasından belirli bir dizine nasıl açabilirim?


150

WPF uygulamasında, kullanıcı bir düğmeyi tıklattığında Windows Gezgini'ni belirli bir dizine açmak istiyorum, bunu nasıl yapabilirim?

Ben böyle bir şey beklenir:

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

Yanıtlar:


306

Neden olmasın Process.Start(@"c:\test");?


9
Not: Bunu diğer uygulamaları da çalıştırmak için kullanabilirsiniz. Process.Start("calc.exe");Hesap Makinesi çalıştıracaktır. Bir çalıştırılabilir dosyanın tam yolunu geçebilir ve çalıştıracaktır.
Jamie Penney

1
LOL, evet, neden olmasın. Komik, Application.Run kafamda, her yerde bulunan Sürece ulaşamadı.WPF'nin benimle oyun oynadığını düşündüm.
Abel

9
not: Orada değilse bir istisna atar. Process.Start'ı ("explorer", @ "c: \ test") deneyin; bunun yerine, istisnayı ele almak istemiyorsanız. Varsayılan bir pencere açılacaktır. Bununla birlikte, istisnayı ele almak daha iyi olacaktır.
amalgamate

9
Kötü niyetli (ya da sadece farkında olmayan) birisi orada herhangi bir dize alabilirse, herhangi bir programı yürütebileceğini unutmayın. @amalgamate önerisi daha güvenlidir, aksi takdirde yolun bir dizin olup olmadığını ve daha önce var olup olmadığını kontrol edin.
Christian Rondeau

3
Arasındaki bir diğer fark Start(dir)ve Start("explorer.exe", dir)eski mevcut pencere odaklanmak akıllı yeterli olacağıdır dirvarsa ikincisi yeni bir penceresi her zaman açılır iken,.
dlf

13

Bu çalışmalı:

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

Veya programları / açık dosyaları ve / veya klasörleri çalıştırmak için bir yöntem istiyorsanız:

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

    StartInformation.FileName = path;

    Process process = Process.Start(StartInformation);

    process.EnableRaisingEvents = true;
}

Ve sonra yöntemi çağırın ve parantez içinde dosyanın ve / veya klasörün dizinini veya uygulamanın adını girin. Umarım bu yardımcı oldu!


12

Kullanabilirsiniz System.Diagnostics.Process.Start.

Veya WinApi'yi doğrudan explorer.exe'yi başlatacak aşağıdaki gibi bir şeyle kullanın. ShellExecute için dördüncü parametreyi kullanarak bir başlangıç ​​dizini kullanabilirsiniz.

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

Beyanlar pinvoke.net web sitesinden gelir .


1
Evet, bunu takip eden hatalar alıyordum, <strike> grev </strike> btw cool hakkında bilmiyordum
Edward Tanguay

1
maalesef, sadece cevaplarda / sorularda çalışır, ancak yorumlarda çalışmaz ;-). Yeni güncelledim.
Abel

+1 Diğer uygulamaları başlatmak için bu kodu kullanacağım, ancak Process.Start () tam da ihtiyacım olan şeydi.
Edward Tanguay

q'ya cevap vermeye çalıştığınızda olan şey budur. 03:00: bariz ;-) özledim. Her neyse, Process.Start istediğim şeyi yapamadığında sık sık ShellExecute kullandığımı hatırlıyorum (işleyemediği birkaç senaryo var).
Abel

(ilk iki cümle içinde), bir winforms uygulamasından çalışacağını söyledi, Application.Run ("explorer.exe") çalışmaz. Çünkü application.run bir dize bile almaz
barlop

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

Bunu kullanmak zorunda kaldım, sadece tgt dir belirtmenin diğer yolu benim uygulama sona erdiğinde explorer penceresini kapatır.


Tek cevap Access deniedistisna değil .
Matas Vaitkevicius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.