3

我正在编写一个程序,其中有一个具有各种格式(.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(); 正确吗?

4

1 回答 1

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"

于 2013-03-13T19:11:43.733 回答