179 votes

Comment puis-je ouvrir l'Explorateur Windows vers un certain répertoire à partir d'une application WPF ?

Dans une application WPF, lorsqu'un utilisateur clique sur un bouton, je veux ouvrir l'explorateur Windows vers un certain répertoire, comment faire ?

Je m'attendrais à quelque chose comme ça :

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

335voto

Jamie Penney Points 2821

Pourquoi pas ? Process.Start(@"c:\test"); ?

10 votes

Remarque : vous pouvez également utiliser cette fonction pour exécuter d'autres applications. Process.Start("calc.exe"); exécutera Calculator. Vous pouvez lui passer le chemin complet d'un exécutable et il l'exécutera.

1 votes

LOL, oui, pourquoi pas. C'est drôle, j'avais Application.Run dans ma tête, je n'arrivais pas à obtenir l'omniprésent Process.Start et je pensais que WPF se moquait de moi.

0 votes

Cela m'a aidé car j'essayais de charger l'explorateur et d'ajouter le dossier comme répertoire de travail en utilisant process.start. Merci pour la réponse.

34voto

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

J'ai dû utiliser cette méthode, car l'autre méthode, qui consistait à spécifier le répertoire tgt, fermait la fenêtre de l'explorateur lorsque mon application se terminait.

9 votes

La seule réponse que je ne comprends pas Access denied exception.

4 votes

Cela fonctionne parfaitement sans l'exception "Accès refusé". Merci.

14voto

Anthony Smyth Points 183

Cela devrait fonctionner :

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

Ou si vous souhaitez une méthode pour exécuter des programmes/ouvrir des fichiers et/ou des dossiers :

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

    StartInformation.FileName = path;

    Process process = Process.Start(StartInformation);

    process.EnableRaisingEvents = true;
}

Ensuite, appelez la méthode et mettez entre parenthèses soit le répertoire du fichier et/ou du dossier, soit le nom de l'application. J'espère que cela vous a aidé !

0 votes

Ouverture d'un dossier. Obtention d'une erreur sur la ligne process.EnableRaisingEvents = true; car le processus est nul.

13voto

Abel Points 24335

Vous pouvez utiliser System.Diagnostics.Process.Start .

Vous pouvez aussi utiliser directement la WinApi avec quelque chose comme ce qui suit, qui lancera explorer.exe. Vous pouvez utiliser le quatrième paramètre de ShellExecute pour lui donner un répertoire de départ.

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

Les déclarations proviennent du Site web de pinvoke.net .

1 votes

Oui, j'ai eu des erreurs en poursuivant cela, je ne savais pas pour <strike>strike</strike> btw cool

1 votes

Qui, malheureusement, ne fonctionne que dans les réponses / questions, mais pas dans les commentaires ;-). Je viens de mettre à jour.

0 votes

+1 Je vais utiliser ce code pour lancer d'autres applications, mais la fonction Process.Start() était exactement ce dont j'avais besoin.

0voto

Words Like Jared Points 3290

Voici ce qui a marché pour moi :

En gros, utilisez la ligne de commande pour appeler "start C:/path". Et quittez le terminal après, donc "start c:/path && exit".

WindowsExplorerOpen(@"C:/path");

        public static void WindowsExplorerOpen(string path)
        {
            CommandLine(path, $"start {path}");
        }

        private static void CommandLine(string workingDirectory, string Command)
        {
            ProcessStartInfo ProcessInfo;
            Process Process;

            ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + Command + " && exit");
            ProcessInfo.WorkingDirectory = workingDirectory;
            ProcessInfo.CreateNoWindow = true;
            ProcessInfo.UseShellExecute = true;
            ProcessInfo.WindowStyle = ProcessWindowStyle.Hidden;

            Process = Process.Start(ProcessInfo);
            Process.WaitForExit();
        }

Aucun des deux n'a fonctionné pour moi :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X