2009-05-01 6 views
25

クライアント(winformsアプリ)にはファイルブラウザが含まれています。シェルのデフォルトハンドラを使って、選択したファイルを開くことができるようにしたいと思います。それ、どうやったら出来るの?私は、レジストリではなくWin32 APIを使うべきだと読んだことがあるが、私は.NETだけを含むソリューションを好むだろう。シェルのデフォルトハンドラを使用してファイルを開くにはどうすればよいですか?

答えて

54

編集する場合:新しい、より単純な答え。

実際にはProcess.Start(filename)を使用できます。これはdocs for Process.Startで指定されています。その ファイル名を指定してプロセスを開始する

は Windowsのスタートメニューのファイル名を指定して実行]ダイアログボックスで 情報を入力することに似ています。したがって、 ファイル名は 実行可能ファイルを表す必要はありません。拡張子が の ファイルタイプであれば、システムにインストールされている アプリケーションに関連付けられている可能性があります。たとえば のファイル名を使用すると、メモ帳、 としてエディタでテキスト ファイルを、関連付けられていたり、単語 処理ツールと associated.docファイルを持っている場合、それは.DOCを持つことができるかどうか.TXT 拡張子を持つことができますMicrosoft Wordのようなものです。同様に、 実行ダイアログボックスで 実行可能ファイル名を受け入れる方法と同じ方法で、 .exe拡張子の有無にかかわらず、.exe拡張子 はfileNameパラメータではオプションです。 たとえば、fileName パラメータを "Notepad.exe"または "Notepad"に設定できます。

EDIT:オリジナル、複雑な答え:あなたは「実行可能」としてファイルを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

6

わからないそのOK

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

System.Diagnostics.Processは、shell32.ShellExecuteの周囲に.Netネイティブラッパーを提供します。

MSDNの両方のAPIとMSDNドキュメントの説明については、PInvoke.Netを参照してください。

関連する問題