用相关应用程序打开文件

我想要求帮助打开从关联的应用程序的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); 

这两个示例中的stringfile都表示试图打开的文件的完整path。 现在,除了使用ACDSee应用程序(jpg)图像以外,一切运行良好。 Irfanview协会运作良好,微软办公文件也是如此。 试图打开与acdsee相关联的jpg图像后,它只是运行通知区域中的acdsee,并不打开该文件。

我发现,在registryCLASSES_ROOT的* .jpg图像中,有一个ACDSee.JPG值作为关联的应用程序,在这个键的下方有一个shell- > Open-> Command一个path:

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

我觉得这个怪异/dde是原因,为什么我不能打开文件。 我意识到,在相同的registry键 – >打开有一些DDEExec键值input值[open("%1")]

对于Irfan查看或其他检查的应用程序没有一个ddeexec,只是正常的命令一样

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

可以从命令行运行%1换文件名后运行,但我不能从命令行中的acdsee条目运行命令:(

所以我的问题是,我怎样才能设置ProcessStartInfo对象,以确保它将运行所有的文件,因为它将在双击浏览器,标准和这DDEExec的? 有没有其他的东西像我知道的DDEExec ? 感谢和抱歉我的EN

只要写

 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将运行相关的程序从registry中读取它,就像通常双击一样。

这是一个古老的线程,但以防万一遇到任何人就像我一样。 pi.FileName需要设置为要用来打开文件的可执行文件的文件名(可能是文件的完整path)。 以下代码适用于我用VLC打开video文件。

 string file = files[currentIndex].fileName; ProcessStartInfo pi = new ProcessStartInfo(file); pi.Arguments = Path.GetFileName(file); pi.UseShellExecute = true; pi.WorkingDirectory = Path.GetDirectoryName(file); pi.FileName = "C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe"; pi.Verb = "OPEN"; Process.Start(pi); 

Tigran的答案有效,但将使用Windows的默认应用程序来打开您的文件,所以如果您想使用非默认应用程序打开文件,使用ProcessStartInfo可能会很有用。