181

我看到了另一个主题,我遇到了另一个问题。该过程正在启动(在任务管理器中看到),但该文件夹未在我的屏幕上打开。怎么了?

System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
4

14 回答 14

309

你确定文件夹“ c:\teste”存在吗?如果没有,资源管理器将打开显示一些默认文件夹(在我的情况下为“ C:\Users\[user name]\Documents”)。

更新

我尝试了以下变体:

// opens the folder in explorer
Process.Start(@"c:\temp");
// opens the folder in explorer
Process.Start("explorer.exe", @"c:\temp");
// throws exception
Process.Start(@"c:\does_not_exist");
// opens explorer, showing some other folder)
Process.Start("explorer.exe", @"c:\does_not_exist");

如果这些(好吧,除了抛出异常的除外)都不能在您的计算机上运行,​​我认为问题不在于代码,而在于环境。如果是这种情况,我会尝试以下一种(或两种):

  • 打开运行对话框,输入“explorer.exe”并回车
  • 打开命令提示符,输入“explorer.exe”并回车
于 2009-07-15T16:30:52.733 回答
64

为了完整起见,如果您只想打开一个文件夹,请使用以下命令:

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
    FileName = "C:\\teste\\",
    UseShellExecute = true,
    Verb = "open"
});

确保 FileNamePath.DirectorySeparatorChar以使其明确指向文件夹结尾。(感谢@binki。)

此解决方案不适用于打开文件夹和选择项目,因为似乎没有动词。

于 2009-07-15T16:44:52.080 回答
22

如果要选择文件或文件夹,可以使用以下命令:

Process.Start("explorer.exe", "/select, c:\\teste");
于 2016-08-24T15:49:15.727 回答
5

您正在使用 @ 符号,它消除了转义反斜杠的需要。

删除 @ 或将 \\ 替换为 \

于 2009-07-15T16:23:29.207 回答
5

使用非转义字符串时不需要双反斜杠:

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
于 2009-07-15T16:23:47.617 回答
4

您应该使用其中一种System.Diagnostics.Process.Start()重载。这很简单!

如果您没有放置要运行的进程的文件名 ( explorer.exe),系统会将其识别为有效的文件夹路径并尝试将其附加到已运行的 Explorer 进程。在这种情况下,如果文件夹已经打开,Explorer 将不执行任何操作。

如果您放置进程的文件名(如您所做的那样),系统将尝试运行该进程的新实例,并将第二个字符串作为参数传递。如果字符串是有效文件夹,则在新创建的进程上打开它,如果不是,则新进程将不执行任何操作。

在任何情况下,我都不知道该过程如何处理无效的文件夹路径。使用System.IO.Directory.Exists()应该足以确保这一点。

于 2012-02-24T20:42:57.080 回答
1

当 at 符号为您执行此操作时,您正在转义反斜杠。

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
于 2009-07-15T16:24:13.840 回答
1

使用采用 ProcessStartInfo 实例的方法的重载版本,并将 ProcessWindowStyle 属性设置为适合您的值。

于 2009-07-15T16:25:45.863 回答
1
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste"); 

此代码在 VS2010 环境中运行良好,并且可以正确打开本地文件夹,但是如果您在 IIS 中托管相同的应用程序并尝试打开,那么它肯定会失败。

于 2014-07-08T08:40:57.490 回答
1

我刚遇到这个问题,我发现了原因。我的原因未在此处列出,因此其他任何遇到此问题的人都无法解决。

如果您以其他用户身份运行 Visual Studio 并尝试使用 Process.Start,它将在该用户上下文中运行,并且您不会在屏幕上看到它。

于 2017-11-17T01:40:13.520 回答
0

奇怪的。

如果它找不到 explorer.exe,你应该得到一个异常。如果找不到文件夹,它应该仍然打开一些文件夹(例如我的文档)

您说任务管理器中出现了另一个资源管理器副本,但您看不到它。

它是否有可能在屏幕外打开(即另一台显示器)?

或者您是否有机会在非交互式服务中执行此操作?

于 2009-07-15T16:40:27.723 回答
0

从开始菜单运行“explorer.exe c:\teste”时它是否正确打开?你尝试这个有多久了?当我的机器有很多进程并且当我打开一个新进程(设置为 IE)时,我看到了类似的行为。它在任务管理器中启动但没有显示在前端。你试过重启吗?

以下代码应打开一个新的资源管理器实例

class sample{

static void Main()
{
  System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}
于 2009-07-15T16:47:22.450 回答
0

当您尝试此操作时,您是否有很多应用程序正在运行?我有时会在工作中遇到奇怪的行为,因为我的系统用完了 GDI 句柄,因为我打开了很多窗口(我们的应用程序使用了很多)。

发生这种情况时,窗口和上下文菜单不再出现,直到我关闭某些东西以释放一些 GDI 句柄。

XP 和 Vista 中的默认限制是 10000。我的 DevStudio 有 1500 个 GDI 句柄并不罕见,所以如果你打开了几个 Dev studio 副本,它会很快吃光它们。您可以在 TaskManager 中添加一列,以查看每个进程正在使用多少句柄。

您可以进行注册表调整来增加限制。

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx

于 2009-07-15T17:04:34.240 回答
0

System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");

只需更改路径或将其声明为string

于 2015-01-12T07:15:32.680 回答