2009-05-01 148 views
25

我们的客户端(一个winforms应用程序)包含一个文件浏览器。我希望用户能够使用shell的默认处理程序打开选定的文件。我怎么做?我读过我应该使用Win32 API而不是注册表,但我更喜欢只涉及.NET的解决方案。如何使用shell的默认处理程序打开文件?

回答

54

编辑:较新的,更简单的答案。

你确实可以使用Process.Start(filename)。通过指定 文件名类似于键入的 Windows开始菜单中的运行对话框中的 信息

启动流程:这是在docs for Process.Start规定。因此, 文件名不需要代表 的可执行文件。它可以是任何 文件类型,其扩展名 已与安装在系统上的应用程序 关联。例如 的文件名可以有一个.txt扩展 如果您有相关的文本文件 用编辑器,如记事本, 也可以有一个.doc,如果你有一个词 处理工具 associated.doc文件,如Microsoft Word。同样地,在 运行对话框中可以接受或不 扩展名为.exe的 可执行文件名相同的方式,扩展名为.exe 是在文件名参数可选。 例如,您可以将fileName 参数设置为“Notepad.exe”或 “记事本”。

编辑:原来,复杂的答案:

如果使用Process.Start与该文件为“可执行文件”,并指定UseShellExecute = true都可以正常运行。例如:

using System; 
using System.Diagnostics; 

class Test 
{ 
    static void Main() 
    { 
     ProcessStartInfo psi = new ProcessStartInfo("test.txt"); 
     psi.UseShellExecute = true; 
     Process.Start(psi); 
    } 
} 

在记事本中打开test.txt。

实际上,UseShellExecute=true是默认的,但是因为它是绝对需要的,所以我喜欢明确地指定它以使读者更清楚。

+0

`的Process.Start( “C:\ TEMP \ test.xlsx”);`打开如果**安装*** Excel中的*** XLSX文件**。如果没有安装,我不知道。 – Kiquenet 2017-02-24 09:59:06

6

不知道,如果其确定

System.Diagnostics.Process.Start(filePath); 
2

System.Diagnostics.Process提供了围绕shell32.ShellExecute的.net本机包装。

请参阅PInvoke.Net以了解有关这两种API的讨论,以及有关MSDN的MSDN文档。

相关问题