2012-04-16 69 views
39

我想要求助于从关联的应用程序中打开来自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应用程序的(jpg)图像之外,一切运行良好。 Irfanview协会运作良好,MS办公文件也是如此。试图打开与acdsee相关的jpg图像后,它只运行通知区域中的acdsee,并且不打开该文件。

我发现,在注册表中CLASSES_ROOT为* .jpg图像,有一个ACDSee.JPG值相关联的应用程序,此注册表项下存在的壳 - >打开 - >命令路径:

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

和我的事情,这个怪异的/dde是什么原因,为什么我不能打开该文件。我意识到,在同一章键壳 - >打开存在具有值[open("%1")]

对于伊尔视图或其它检查应用中的一些DDEExec键输入,则没有ddeexec,只是正常的命令等

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

可以从命令行swaping%1文件名 后运行,但我不能运行在命令行ACDSEE进入命令:(

所以我的问题是,我该怎么设置ProcessStartInfo反对确保它将运行所有文件,因为它将在浏览器中通过doubleclick标准和这个DDEExec?是否还有其他类似DDEExec,我知道吗? 感谢和抱歉我的EN

回答

79

只要写

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"); 
... 

和壳牌将运行相关程序从注册表中读取它,像往常一样双击一样。

+2

他似乎已经用'Process.Start(file);'试过了。 – 2012-04-16 12:43:00

+0

“所以我的问题是,我怎样才能设置ProcessStartInfo对象,以确保它可以像在浏览器中一样运行所有文件,双击”:答案就是这样。他使用命令行参数,无论如何......但不是直接调用,就像我看到的那样。 – Tigran 2012-04-16 12:45:52

+0

@Tigran Mario是正确的,就像我写的那样,我尝试了你的建议作为第二个例子......我想问问我的问题,显然这不是正确的溶剂,因为jpg没有打开! – Zavael 2012-04-16 12:47:39

9

这是一个古老的线程,但只是为了防止任何人像我一样碰到它。 pi.FileName需要设置为要用来打开文件的可执行文件的文件名(可能是文件的完整路径)。以下代码适用于我使用VLC打开视频文件。

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); 

狄格兰的答案的作品,但将使用Windows的默认应用程序打开文件,因此使用的ProcessStartInfo可能是有用的,如果你要打开的文件与应用程序是不是默认。

+3

(:对旧线程的旧回复评论:) Tigran的回答为每个文件的扩展运行最近关联的程序,树的回答强制它使用** vlc .exe **。Zavael的问题是关于他仅仅使用** ACDSee.exe **以及如何设置其扩展关联的问题。我认为ACDSee的作者需要联系这方面的人员。 – 2014-11-13 21:42:49

相关问题