一尘不染

使用关联的应用程序打开文件

c#

我想在与关联应用程序一起从c#应用程序打开文件时寻求帮助。我尝试了这个:

      ProcessStartInfo pi = new ProcessStartInfo(file);
      pi.Arguments = Path.GetFileName(file);
      pi.UseShellExecute = true;
      pi.WorkingDirectory = Path.GetDirectoryName(file);
      pi.FileName = file;
      pi.Verb = "OPEN";
      Process.Start(pi);

或这个:

      Process.Start(file);

其中file两个示例中的字符串代表尝试打开的文件的完整路径。现在,一切正常,除了 使用ACDSee app(jpg)图像
。Irfanview协会运作良好,MS Office文件也是如此。尝试打开与acdsee关联的jpg图像后,它仅在通知区域中运行acdsee而不打开文件。

我发现,在 .jpg图像的注册表 CLASSES_ROOT 中,有一个ACDSee.JPG值作为关联的应用程序,在此键下的shell- >
Open-> Command中
*有一个路径:

"C:\Program Files\ACD Systems\ACDSee\ACDSee.exe" /dde

而且我觉得这很奇怪/dde是原因,为什么我无法打开文件。我意识到在同一个reg key shell- >
Open中,
有一些DDEExec键值[open("%1")]

对于Irfan View或其他已检查的应用程序,没有ddeexec,只有常规命令,例如

"C:\Program Files (x86)\IrfanView\i_view32.exe" "%1"

在将%1交换为文件名后 可以从命令行运行,但是我无法从命令行中的acdsee条目运行命令:(

所以我的问题是,如何设置ProcessStartInfo对象以 确保它可以 像双击资源管理器中的标准 文件 一样
运行所有文件DDEExec?还有其他DDEExec我应该知道的东西吗?谢谢你,对不起我


阅读 291

收藏
2020-05-19

共1个答案

一尘不染

写就好了

System.Diagnostics.Process.Start(@"file path");

System.Diagnostics.Process.Start(@"C:\foo.jpg");
System.Diagnostics.Process.Start(@"C:\foo.doc");
System.Diagnostics.Process.Start(@"C:\foo.dxf");
...

Shell将运行关联的程序,从注册表中读取它,就像通常的双击一样。

2020-05-19