2009-05-01 150 views
25

我們的客戶端(一個winforms應用程序)包含一個文件瀏覽器。我希望用戶能夠使用shell的默認處理程序打開選定的文件。我怎麼做?我讀過我應該使用Win32 API而不是註冊表,但我更喜歡只涉及.NET的解決方案。如何使用shell的默認處理程序打開文件?

回答

54

編輯:較新的,更簡單的答案。

你確實可以使用Process.Start(filename)。通過指定 文件名類似於鍵入的 Windows開始菜單中的運行對話框中的 信息

啓動流程:這是在docs for Process.Start規定。因此, 文件名不需要代表 的可執行文件。它可以是任何 文件類型,其擴展名 已與安裝在系統上的應用程序 關聯。例如 的文件名可以有一個.txt擴展 如果您有相關的文本文件 用編輯器,如記事本, 也可以有一個.doc,如果你有一個詞 處理工具 associated.doc文件,如Microsoft Word。同樣地,在 運行對話框中可以接受或不 擴展名爲.exe的 可執行文件名相同的方式,擴展名爲.exe 是在文件名參數可選。 例如,您可以將fileName 參數設置爲「Notepad.exe」或 「記事本」。

編輯:原來,複雜的答案:

如果使用Process.Start與該文件爲「可執行文件」,並指定UseShellExecute = true都可以正常運行。例如:

using System; 
using System.Diagnostics; 

class Test 
{ 
    static void Main() 
    { 
     ProcessStartInfo psi = new ProcessStartInfo("test.txt"); 
     psi.UseShellExecute = true; 
     Process.Start(psi); 
    } 
} 

在記事本中打開test.txt。

實際上,UseShellExecute=true是默認的,但是因爲它是絕對需要的,所以我喜歡明確地指定它以使讀者更清楚。

+0

`的Process.Start( 「C:\ TEMP \ test.xlsx」);`打開如果**安裝*** Excel中的*** XLSX文件**。如果沒有安裝,我不知道。 – Kiquenet 2017-02-24 09:59:06

6

不知道,如果其確定

System.Diagnostics.Process.Start(filePath); 
2

System.Diagnostics.Process提供了圍繞shell32.ShellExecute的.net本機包裝。

請參閱PInvoke.Net以瞭解有關這兩種API的討論,以及有關MSDN的MSDN文檔。

相關問題