我看到了另一个主题,但我遇到了另一个问题。该过程正在启动(在任务管理器中看到),但是文件夹未在我的屏幕上打开。怎么了?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
我看到了另一个主题,但我遇到了另一个问题。该过程正在启动(在任务管理器中看到),但是文件夹未在我的屏幕上打开。怎么了?
System.Diagnostics.Process.Start("explorer.exe", @"c:\teste");
Answers:
您确定文件夹“ 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");
如果这些(除了引发异常的程序除外)在您的计算机上都不起作用,那么我认为问题不在于代码,而在于环境。如果是这样,我将尝试以下一项(或两项):
Process.Start(path)
激活该窗口(可能仅在任务栏中闪烁,而不显示在最前面);explorer.exe
+ parameter总是在前面打开一个新窗口(但同一窗口多次)。因此,两者都有警告。
Process.Start(@"c:\temp")
必须谨慎使用。如果c:\temp.com
存在,则函数调用将打开c:\temp.com
。有关更多详细信息,请参见forums.iis.net/p/1239773/2144186.aspx。
Process.Start(@"c:\temp")
容易打开其他文件夹,例如C:\temp.exe
或C:\temp.cmd
。在VS本身表现出错误的行为的情况下,请参见此问题。您可以通过使用explorer.exe
变体或(最好是IMO)始终添加来避免这种情况Path.DirectorySeparatorChar
。例如,Process.Start(@"C:\temp\")
。
出于完整性考虑,如果您只想打开一个文件夹,请使用以下命令:
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo() {
FileName = "C:\\teste\\",
UseShellExecute = true,
Verb = "open"
});
确保FileName以结尾,Path.DirectorySeparatorChar
以使其明确指向文件夹。(感谢@binki。)
该解决方案不适用于打开文件夹和选择项目,因为似乎没有动词。
C:\teste.exe
或C:\teste.cmd
存在),Explorer将打开该其他文件夹,而不是您想要的文件夹。为避免这种情况,您可以将a附加Path.DirectorySeparatorChar
到路径中。见VS本身如何犯同样的错误。
Verb = "select"
,但是您不能使用。无论如何,很好的答案!
Verb = "open"
不需要设置。(在Windows中测试,其他操作系统可能有所不同。)
您正在使用@符号,这消除了转义反斜杠的需要。
删除@或用\替换\\
您应该使用 System.Diagnostics.Process.Start()
重载之一。很简单!
如果您没有放置要运行的进程的文件名(explorer.exe
),则系统会将其识别为有效的文件夹路径,并尝试将其附加到已经运行的Explorer进程中。在这种情况下,如果文件夹已经打开,资源管理器将不执行任何操作。
如果您放置流程的文件名(如您所做的那样),系统将尝试运行流程的新实例,并将第二个字符串作为参数传递。如果字符串是有效文件夹,则在新创建的进程上将其打开,否则,新进程将不执行任何操作。
我不知道在任何情况下该进程如何处理无效的文件夹路径。使用System.IO.Directory.Exists()
应该足以确保这一点。
Path.DirectorySeparatorChar
。否则,如果还存在一个具有相同名称但.cmd
也.exe
可能带有其他后缀的文件夹,Explorer将打开该其他文件夹;或者,如果这些文件夹实际上是可执行文件或脚本,它将运行它们而不是按预期方式打开该文件夹。
使用采用ProcessStartInfo实例的方法的重载版本,并将ProcessWindowStyle属性设置为适合您的值。
奇怪。
如果找不到explorer.exe,您应该得到一个例外。如果找不到该文件夹,它仍应打开一些文件夹(例如我的文档)
您说浏览器的另一个副本出现在任务管理器中,但看不到它。
是否有可能打开屏幕外(即另一台显示器)?
还是您有机会在非交互式服务中执行此操作?
尝试此操作时,您是否正在运行许多应用程序?有时我在工作中遇到奇怪的行为,因为我打开了太多窗口(我的应用程序大量使用),因此我的系统用尽了GDI句柄。
发生这种情况时,直到我关闭某些东西以释放一些GDI手柄,窗口和上下文菜单才会出现。
XP和Vista中的默认限制为10000。我的DevStudio具有1500个GDI句柄并不罕见,因此,如果您打开了几个Dev Studio副本,它会很快耗尽它们。您可以在TaskManager中添加一列,以查看每个进程正在使用多少个句柄。
您可以执行注册表调整来增加限制。
有关更多信息,请参见http://msdn.microsoft.com/zh-cn/library/ms724291(VS.85).aspx
System.Diagnostics.Process.Start("explorer.exe",@"c:\teste");
只需更改路径或在其中声明 string