如何使用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 。