使用Process.Start打开一个文件夹
我看到了另一个话题 ,我又遇到了另外一个问题。 该过程开始(在任务pipe理器看到),但文件夹不在我的屏幕上打开。 怎么了?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
你确定文件夹“ c:\teste
”存在吗? 如果没有,资源pipe理器将打开显示一些默认文件夹(在我的情况下“ 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");
如果这些(除了抛出exception之外的)都不能在你的计算机上工作,我不认为问题在于代码,而是在环境中。 如果是这样的话,我会尝试以下一种(或两种):
- 打开运行对话框,input“explorer.exe”,然后回车
- 打开命令提示符,input“explorer.exe”,然后回车
只是为了完整性,如果你想要做的只是打开一个文件夹,使用这个:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() { FileName = "C:\\teste", UseShellExecute = true, Verb = "open" });
这个解决scheme不能用于打开文件夹和select一个项目,因为这似乎不是一个动词。
如果你想select文件或文件夹,你可以使用以下内容:
Process.Start("explorer.exe", "/select, c:\\teste");
您正在使用@符号,从而不需要转义您的反斜杠。
删除@或用\replace\
使用非转义string时不需要双反斜线:
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
您应该使用System.Diagnostics.Process.Start()
重载之一。 这很简单!
如果您没有放置要运行的进程的文件名( explorer.exe
),则系统会将其识别为有效的文件夹path,并尝试将其附加到正在运行的资源pipe理器进程。 在这种情况下,如果文件夹已经打开,Explorer将不会执行任何操作。
如果您放置进程的文件名(如您所做的那样),系统将尝试运行进程的新实例,将第二个string作为parameter passing。 如果string是一个有效的文件夹,它将在新创build的进程上打开,否则新进程将不会执行任何操作。
我不知道在任何情况下,进程如何处理无效的文件夹path。 使用System.IO.Directory.Exists()
应该足以确保。
使用带有ProcessStartInfo实例的方法的重载版本,并将ProcessWindowStyle属性设置为适合您的值。
奇怪。
如果找不到explorer.exe,你应该会得到一个exception。 如果找不到文件夹,它应该仍然打开一些文件夹(例如我的文档)
你说另一个资源pipe理器的副本出现在taskmanager中,但是你看不到它。
是否有可能在屏幕外(即另一台显示器)?
或者,你是否有机会在非交互式服务中这样做?
当您从开始菜单运行“explorer.exe c:\ teste”时它会正确打开吗? 你试了多久? 我看到一个类似的行为,当我的机器有很多进程,当我打开一个新的进程(设置说IE)..它开始在任务pipe理器,但不显示在前端。 你尝试过重新启动吗?
下面的代码应该打开一个新的浏览器实例
class sample{ static void Main() { System.Diagnostics.Process.Start("explorer.exe",@"c:\teste"); } }
当你尝试这个时,你有很多应用程序在运行吗? 我在工作中遇到奇怪的行为,有时是因为我的系统中有很多窗口打开(我们的应用程序使用很多),所以我的系统用完了GDI句柄。
发生这种情况时,窗口和上下文菜单不会出现,直到我closures某些东西来释放一些GDI句柄。
XP和Vista默认的限制是10000.我的DevStudio拥有1500个GDI句柄并不罕见,所以如果你有几个Dev studio的打开副本,它可以很快地把它们吃掉。 您可以在TaskManager中添加一列来查看每个进程正在使用的手柄数量。
有一个registry的调整,你可以做的,以增加限制。
有关更多信息,请参阅http://msdn.microsoft.com/zh-cn/library/ms724291(VS.85).aspx
当符号为你做的时候,你正在逃避反斜杠。
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
此代码从VS2010环境中正常工作,并正确打开本地文件夹,但如果您在IIS中承载相同的应用程序,并尝试打开,则肯定会失败。
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
只要改变path或在一个string
声明它
我刚刚有这个问题,我发现了为什么。 我的理由是没有在这里列出,所以谁得到这个问题,这些都没有解决这个问题。
如果以另一个用户的身份运行Visual Studio并尝试使用Process.Start,它将在该用户上下文中运行,并且不会在屏幕上看到它。