Edward Tanguay
Edward Tanguay

Reputation: 193302

How can I open Windows Explorer to a certain directory from within a WPF app?

In a WPF application, when a user clicks on a button I want to open the Windows explorer to a certain directory, how do I do that?

I would expect something like this:

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

Upvotes: 203

Views: 207831

Answers (7)

Ahmad Hamdy Hamdeen
Ahmad Hamdy Hamdeen

Reputation: 556

If you want to open a directory,

you must to add ‘\’ to "c:\test" to open the folder correctly:

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

Upvotes: 1

Johannes Fischer
Johannes Fischer

Reputation: 1

The issue likely arises due to how Process.Start handles arguments, especially with file paths in newer .NET versions.

Use this:

var FilePath = manager.GetCsvDirectory;
if (Directory.Exists(FilePath))
{
    Process.Start(new ProcessStartInfo
    {
        FileName = FilePath,
        UseShellExecute = true,
        Verb = "open"
    });
}

Upvotes: 0

Jesus is Lord
Jesus is Lord

Reputation: 15399

Here's what worked for me:

Basically use the command line to call "start C:/path" And exit the terminal afterward, so "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();
        }

Neither of these worked for me:

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

Upvotes: 0

Anthony Smyth
Anthony Smyth

Reputation: 305

This should work:

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

Or if you'd like a method to run programs/open files and/or folders:

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

    StartInformation.FileName = path;

    Process process = Process.Start(StartInformation);

    process.EnableRaisingEvents = true;
}

And then call the method and in the parenthesis put either the directory of the file and/or folder there or the name of the application. Hope this helped!

Upvotes: 17

MarkyMarksFunkyBunch
MarkyMarksFunkyBunch

Reputation: 1190

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

I had to use this, the other way of just specifying the tgt dir would shut the explorer window when my application terminated.

Upvotes: 74

Abel
Abel

Reputation: 57159

You can use System.Diagnostics.Process.Start.

Or use the WinApi directly with something like the following, which will launch explorer.exe. You can use the fourth parameter to ShellExecute to give it a starting directory.

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

The declarations come from the pinvoke.net website.

Upvotes: 13

Jamie Penney
Jamie Penney

Reputation: 9522

Why not Process.Start(@"c:\test");?

Upvotes: 359

Related Questions