我正在编写一个程序,其中包含各种格式的图像列表(.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();正确?
答案 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"