84

関連するアプリを使用して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アソシエーションはうまく機能し、MSOfficeのドキュメントも同様です。acdseeに関連付けられたjpg画像を開こうとした後、通知領域でacdseeを実行するだけで、ファイルは開きません。

* .jpg画像のレジストリCLASSES_ROOTに、関連付けられたアプリとしてACDSee.JPG値があり、このキーの下にシェル->開く->コマンドパスがあることを発見しました。

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

そして、私はこの奇妙なこと/ddeが理由であり、私がファイルを開くことができない理由だと思います。同じregキーシェル->開くに値のあるDDEExecキーエントリがあることに気づきました[open("%1")]

Irfanビューまたはその他のチェック済みアプリの場合、ddeexecはなく、次のような通常のコマンドだけです。

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

%1をファイル名に交換した後、コマンドラインから実行できますが、コマンドラインのacdseeエントリからコマンドを実行できませんでした:(

だから私の質問は、ダブルクリック、標準、そしてこれによってエクスプローラーにあるのと同じようにすべてのファイルを実行するようProcessStartInfoにオブジェクトを設定するにはどうすればよいですか?私が知っておくべき他の何かがありますか?私のENに感謝し、申し訳ありませんDDEExecDDEExec

更新:この質問はまだ賛成票を獲得しているので、受け入れられた回答が機能することを明確にしたいと思います。古いバージョンのACDSeeでのみ問題が発生し、Process.Startコマンドやjpg拡張機能では問題が発生しませんでした。

4

3 に答える 3

132

書くだけ

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

そしてシェルは、通常のダブルクリックのように、関連するプログラムをレジストリから読み取って実行します。

于 2012-04-16T12:38:28.740 に答える
23

これは古いスレッドですが、私のように誰かが遭遇した場合に備えて. pi.FileName は、ファイルを開くために使用する実行可能ファイルのファイル名 (場合によっては file へのフル パス) に設定する必要があります。以下のコードは、VLC でビデオ ファイルを開くのに役立ちます。

var path = files[currentIndex].fileName;
var pi = new ProcessStartInfo(path)
{
    Arguments = Path.GetFileName(path),
    UseShellExecute = true,
    WorkingDirectory = Path.GetDirectoryName(path),
    FileName = "C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe",
    Verb = "OPEN"
};
Process.Start(pi)

Tigranの答えは機能しますが、Windowsのデフォルトアプリケーションを使用してファイルを開くため、デフォルトではないアプリケーションでファイルを開く場合は ProcessStartInfo を使用すると便利です。

于 2013-07-23T09:59:17.153 に答える