2012-04-16 20 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); 

またはこの:両方の例では、文字列fileを開こうとするファイルへのフルパスを表し

 Process.Start(file); 

は、私はこれを試してみました。今、ACDSeeアプリの(jpg)画像を除いて、すべてうまくいっています。 Irfanviewの協会もうまくいきます。 acdseeに関連付けられたjpgイメージを開こうとすると、通知領域でacdseeが実行され、ファイルは開かれません。

私は* .JPG画像のレジストリCLASSES_ROOTで、ACDSee.JPG値が関連付けられたアプリケーションとして存在し、このキーの下にシェル - >オープン>コマンドパスであることを発見:この奇妙な/ddeは私がファイルを開くことができない理由であることを

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

と私の事。私は、同じREGの重要シェル - >開くイルファンビューまたは他の確認アプリddeexecがないの値を持ついくつかのDDEExecキー入力[open("%1")]

"C:\Program Files (x86)\IrfanView\i_view32.exe" "%1" 
のような普通のコマンドがあり実現しましたファイル名 ために%1をswapingした後、コマンドラインから実行することができますが、私は、コマンドラインでのACDSeeのエントリからコマンドを実行することができませんでした:(

だから私の質問は、私が設定できるか、である

ProcessStartInfoオブジェクトはになります。がダブルクリックでエクスプローラに表示されるように、すべてのファイルが実行されるようにしてください。標準とこれは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);'でそれを試したようです。 –

+0

"私の質問では、ProcessStartInfoオブジェクトを設定して、エクスプローラのようにすべてのファイルをダブルクリックで確実に実行できるようにするにはどうすればいいですか?答えはそのとおりです。彼はコマンドライン引数を使っていましたが、私が見る限りでは、直接呼び出しはしません。 – Tigran

+0

@Tigran Marioは正しいです、私が書いたように、私は第2の例としてあなたの提案を試みました...私はJPpgが開かれていないので、これが正しい解決策ではないことを明確に質問したいと思っていました! – Zavael

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

Tigranの答えは動作しますが、デフォルトではないアプリケーションでファイルを開きたい場合はそれほど有用である可能性がProcessStartInfoを使用して、あなたのファイルを開くには、Windowsのデフォルトのアプリケーションを使用します。

+3

(:古いスレッドに対する古い応答のコメント:) Tigranの答えは、各ファイルの拡張子のための最近の関連するプログラムを実行します。ツリーの答えは、** vlcを使用するよう強制します.exe **。Zavaelさんの質問は、** ACDSee.exe **との間に問題があることと、その拡張子の関連付けをどのように設定するのかです。私はACDSeeの作者に連絡する必要があると思います。 –