Come posso aprire Esplora risorse in una determinata directory dall'app WPF?


150

In un'applicazione WPF, quando un utente fa clic su un pulsante, voglio aprire Windows Explorer in una determinata directory, come posso farlo?

Mi aspetterei qualcosa del genere:

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

Risposte:


306

Perché no Process.Start(@"c:\test");?


9
Nota: è possibile utilizzare questo per eseguire anche altre applicazioni. Process.Start("calc.exe");eseguirà la calcolatrice. Puoi passare il percorso completo a un eseguibile e lo eseguirà.
Jamie Penney,

1
LOL, sì, perché no. Divertente, aveva Application.Run nella mia testa, non riuscivo ad arrivare all'onnipresente Processo. Inizia e pensa che WPF stesse giocando con me.
Abel,

9
nota: genererà un'eccezione se non è presente. Prova Process.Start ("explorer", @ "c: \ test"); invece, se non si desidera gestire l'eccezione. Si aprirà una finestra predefinita. Spesso sarà comunque meglio gestire l'eccezione.
fondono il

9
Fai attenzione che se qualcuno dannoso (o semplicemente inconsapevole) può ottenere qualsiasi stringa lì, sarà in grado di eseguire qualsiasi programma. Il suggerimento di @amalgamate è più sicuro, altrimenti controlla se il percorso è una directory e se esiste prima.
Christian Rondeau,

3
Un'altra differenza tra Start(dir)e Start("explorer.exe", dir)è che la prima sarà abbastanza intelligente da focalizzare la finestra esistente dirse ce n'è una, mentre la seconda apre una nuova finestra ogni volta.
dlf

13

Questo dovrebbe funzionare:

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

O se desideri un metodo per eseguire programmi / aprire file e / o cartelle:

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

    StartInformation.FileName = path;

    Process process = Process.Start(StartInformation);

    process.EnableRaisingEvents = true;
}

Quindi chiama il metodo e tra parentesi inserisci la directory del file e / o la cartella o il nome dell'applicazione. Spero che questo abbia aiutato!


12

È possibile utilizzare System.Diagnostics.Process.Start.

Oppure usa WinApi direttamente con qualcosa di simile al seguente, che avvierà explorer.exe. È possibile utilizzare il quarto parametro per ShellExecute per assegnargli una directory iniziale.

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

Le dichiarazioni provengono dal sito Web pinvoke.net .


1
sì, stavo ricevendo errori a inseguirlo, non sapevo di <strike> strike </strike> tra l'altro
Edward Tanguay,

1
che, sfortunatamente, funziona solo in risposte / domande, ma non nei commenti ;-). Ho appena aggiornato.
Abel,

+1 Userò questo codice per avviare altre app, ma Process.Start () era esattamente quello di cui avevo bisogno.
Edward Tanguay,

questo è ciò che accade quando provi a rispondere a q. alle 3 del mattino: ti manca l'ovvio ;-). Ad ogni modo, ricordo che uso spesso ShellExecute quando Process.Start non fa ciò che voglio (ci sono alcuni scenari che non è in grado di gestire).
Abel,

quello che tu (nelle prime due frasi), hai detto, funzionerebbe da un'applicazione winforms, Application.Run ("explorer.exe") non funziona. Perché application.run non
accetta

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

Ho dovuto usare questo, l'altro modo di specificare solo la directory tgt avrebbe chiuso la finestra di Explorer al termine della mia applicazione.


L'unica risposta non ho alcuna Access deniedeccezione.
Matas Vaitkevicius,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.