如何在WPF应用程序中将Windows资源管理器打开到某个目录?


150

在WPF应用程序中,当用户单击按钮时,我想将Windows资源管理器打开到某个目录,该怎么做?

我期望这样的事情:

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

Answers:


306

为什么不Process.Start(@"c:\test");呢?


9
注意:您也可以使用它来运行其他应用程序。Process.Start("calc.exe");将运行计算器。您可以将完整路径传递给可执行文件,然后它将运行它。
杰米·彭尼

1
大声笑,是的,为什么不呢。有趣,拥有Application。在我脑海中奔跑,无法进入无处不在的Process。开始并认为WPF正在与我玩游戏。
亚伯

9
注意:如果不存在,它将引发异常。尝试Process.Start(“ explorer”,@“ c:\ test”); 相反,如果您不想处理该异常。它将打开一个默认窗口。但是,通常最好处理该异常。
amalgamate 2013年

9
请注意,如果恶意(或不知道)的人可以在那里获取任何字符串,那么他们将能够执行任何程序。@amalgamate建议更安全,否则请检查路径是否为目录,以及之前是否存在。
Christian Rondeau 2014年

3
Start(dir)和之间的另一个区别Start("explorer.exe", dir)是,前者足够聪明,可以将现有窗口聚焦(dir如果有),而后者每次都会打开一个新窗口。
dlf

13

这应该工作:

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

或者,如果您想要一种运行程序/打开文件和/或文件夹的方法:

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

    StartInformation.FileName = path;

    Process process = Process.Start(StartInformation);

    process.EnableRaisingEvents = true;
}

然后调用该方法,并在括号中放置文件和/或文件夹的目录或应用程序的名称。希望这对您有所帮助!


12

您可以使用System.Diagnostics.Process.Start

或者直接将WinApi与以下类似的东西一起使用,这将启动explorer.exe。您可以对ShellExecute使用第四个参数来为其指定起始目录。

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

这些声明来自pinvoke.net网站


1
是的,我在追赶它时遇到了错误,不知道<strike> strike </ strike> btw很酷
Edward Tanguay

1
不幸的是,它仅适用于答案/问题,不适用于评论;-)。我刚刚更新。
亚伯2009年

+1我将使用此代码启动其他应用程序,但是Process.Start()正是我所需要的。
爱德华·坦格

这就是您尝试回答q时发生的情况。凌晨3点:您错过了明显的;-)。无论如何,我记得当Process.Start不是我想要的时(在某些情况下它无法处理),我经常使用ShellExecute。
亚伯

您所说的(在前两个句子之内)在winforms应用程序中有效,Application.Run(“ explorer.exe”)不起作用。因为application.run甚至都不需要字符串
-barlop

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

我必须使用它,另一种仅指定tgt dir的方法将在应用程序终止时关闭资源管理器窗口。


我没有Access denied例外的唯一答案。
Matas Vaitkevicius
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.