如何使用shell的默认处理程序打开文件?

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

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

您确实可以使用Process.Start(filename) 。 这在Process.Start的文档中指定:

通过指定文件名来启动进程类似于在Windows“开始”菜单的“运行”对话框中键入信息。 因此,文件名不需要表示可执行文件。 它可以是扩展已与系统上安装的应用程序关联的任何文件类型。 例如,如果您使用编辑器(如记事本)关联文本文件,则文件名可以具有.txt扩展名;如果您具有带有文字处理工具的关联.doc文件(如Microsoft Word),则文件名可以具有.doc。 同样,与“运行”对话框可以接受带有或不带.exe扩展名的可执行文件名的方式相同,.exe扩展名在fileName参数中是可选的。 例如,您可以将fileName参数设置为“Notepad.exe”或“Notepad”。

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

如果将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是默认值,但由于它是绝对必需的,我喜欢明确指定它以使读者更清楚。

不确定它是否正常

 System.Diagnostics.Process.Start(filePath); 

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

有关API和MSDN上的MSDN文档的讨论,请参阅PInvoke.Net 。