c# - 如何从可以处理特定文件扩展名的程序列表中启动进程?

时间:2013-03-13 19:08:23

标签: c# process registry

我正在编写一个程序,其中包含各种格式的图像列表(.png,.jpg,.bmp,.ico ...)到目前为止,我已经能够获得shell命令的列表与每个文件相关联,如下所示:

"\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""
"\"C:\\Program Files\\GIMP 2\\bin\\gimp-2.8.exe\" \"%1\""
"C:\\Windows\\System32\\rundll32.exe \"C:\\Program Files (x86)\\Windows Photo Viewer\\PhotoViewer.dll\", ImageView_Fullscreen %1"
"\"C:\\Windows\\system32\\mspaint.exe\" /pt \"%1\" \"%2\" \"%3\" \"%4\""    
"\"C:\\Program Files (x86)\\PDFCreator\\pdfcreator.exe\" -IF\"%1\"" string

我不确定这是正确的,但这就是我到目前为止所拥有的。使用时:

Process.Start(completeProgramPath);

除非我使用类似

的内容,否则永远找不到该程序
Process.Start("mspaint.exe");

我希望能够指定操作系统应该使用哪个程序。我究竟做错了什么?是我的程序列表没有指向正确的事情,或者我没有使用Process.Start();正确?

1 个答案:

答案 0 :(得分:3)

如果要为每个图像打开默认程序,只需提供文件名作为Process.Start方法的唯一参数,省略可执行路径,操作系统将在注册表中查找,以便您不必:

Process.Start("C:\some\picture.jpg");

这将打开*.jpg扩展名的默认程序,并将该文件的路径作为参数传递给它。

如果要指定程序,则应使用Process.Start(string, string)重载,在该重载中指定可执行文件的路径作为第一个参数,并将文件的路径指定为第二个参数。

如果您尝试使用注册表项中的确切值,它将无效,因为它们已将"%1"添加到路径,并且rundll32键具有其他参数。关键是在将它们传递给Start方法之前,您必须更改从注册表项中获取的字符串。

示例:
"\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\" \"%1\""需要成为:
"C:\Program Files\Paint.NET\PaintDotNet.exe"