使用Process.Start打开文件夹

时间:2009-07-15 16:19:37

标签: c# explorer

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

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

14 个答案:

答案 0 :(得分:226)

您确定文件夹“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”并按Enter键
  • 打开命令提示符,键入“explorer.exe”并按Enter键

答案 1 :(得分:37)

为了完整起见,如果你想要打开一个文件夹,请使用:

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

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

答案 2 :(得分:15)

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

Process.Start("explorer.exe", "/select, c:\\teste");

答案 3 :(得分:4)

您正在使用@符号,这样就无需转义反斜杠。

删除@或用\

替换\\

答案 4 :(得分:4)

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

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

答案 5 :(得分:3)

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

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

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

我不知道进程在任何情况下如何处理无效的文件夹路径。使用System.IO.Directory.Exists()应该足以确保。{/ p>

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

我刚刚遇到这个问题,我发现了原因。我的理由不在这里列出,所以其他任何人都会遇到这个问题而且没有一个能解决这个问题。

如果您以另一个用户身份运行Visual Studio并尝试使用Process.Start,它将在该用户上下文中运行,您将无法在屏幕上看到它。

答案 9 :(得分:0)

当符号为您执行此操作时,您正在逃避反斜杠。

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

答案 10 :(得分:0)

奇怪。

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

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

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

或者您是否有机会在非互动服务中这样做?

答案 11 :(得分:0)

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

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

class sample{

static void Main()
{
  System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
}
}

答案 12 :(得分:0)

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

当发生这种情况时,窗口和上下文菜单不会长时间显示,直到我关闭某些东西以释放一些GDI句柄。

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

您可以通过注册表调整来增加限制。

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

答案 13 :(得分:0)

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

只需更改路径或在string

中声明路径即可
相关问题