我们的客户端(winforms应用程序)包括文件浏览器.我希望用户能够使用shell的默认处理程序打开所选文件.我怎么做?我已经读过我应该使用Win32 API而不是注册表,但我更喜欢只涉及.NET的解决方案.
Jon*_*eet 61
编辑:更新,更简单的答案.
你确实可以使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
这会在记事本中打开test.txt.
事实上,这UseShellExecute=true
是默认的,但是因为它肯定是必需的,我喜欢明确地指定它以使读者更清楚.
由于这个问题是 Google 中的第一个结果,因此我为 .NET Core 和 .NET 5 以上版本添加了这个更新的答案。您将需要添加UseShellExecute = true
.
Process.Start(new ProcessStartInfo(filePath) { UseShellExecute = true });
Run Code Online (Sandbox Code Playgroud)
它比以前的 .NET Framework 更麻烦,但您可以将其包装在自定义方法中:
public static void OpenFile(string filePath)
=> Process.Start(new ProcessStartInfo(filePath) { UseShellExecute = true });
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19130 次 |
最近记录: |