我正在编写一个程序,其中包含各种格式(.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();正确吗?
最佳答案
如果要为每个图像打开默认程序,则只需将文件名作为唯一参数提供给 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”
关于c# - 如何从可以处理特定文件扩展名的程序列表中启动进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394295/