2012-04-16 71 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

相關問題