web-dev-qa-db-ja.com

Windowsエクスプローラーのコンテキストメニューへの統合

次のような小さなツールを書きたいのですが。

特定のファイル拡張子を持つファイルを右クリックすると、Windowsエクスプローラーのコンテキストメニューに追加のエントリが表示されます。

このエントリをクリックすると、特定のEXEがこのファイルをパラメータの1つとして起動されます。

これにはC#/。NET 2.0を使用したいと思います。それが不可能な場合は、C++/Win32でも実行できます。

私の質問は:

  1. C#.NET 2.0では可能ですか?
  2. Windowsエクスプローラーのコンテキストメニューに統合するために必要な機能は何ですか?
  3. これを永続的にするにはどうすればよいですか? (毎回の起動後にこのツールを再起動したくありません)
  4. 特別な注意が必要なことは何ですか? (異なるOS、セキュリティ権限など)
39
clamp

レジストリにアクセスし、メニュー項目を表示する項目に応じて、root\\File\\Shellまたはroot\Folder\\Shellの下にキーを追加する必要があります。

CodeProjectのこの記事 を試してみてください。非常に便利です。

編集: ここに別の記事 があります。

26
Mark Bell

現在、同じプロセスで複数のランタイムバージョンをホストできないため、シェル拡張に.NETを使用することはサポートされていません(.NET 4ではこの制限が解除されます)。

2つのシェル拡張がある場合を考えます。 1つは.NET 3.5用、もう1つは.NET 1用です。どのランタイムがプロセスにロードされますか?まあ、それは多かれ少なかれランダムです-それはどのシェル拡張が最初にロードされるかに依存します。 2.0ランタイムの場合もあれば、1.1ランタイムの場合もあります。

これは、.NETプログラムが共通のファイルダイアログを作成する場合の問題でもあります。シェル拡張が読み込まれる場合と読み込まれない場合があり、正しいランタイムバージョンで実行される場合とされない場合があります。

そのため、 シェル拡張ルート を使用する場合は、ネイティブC++/COM/Win32を使用する必要があります。

3
DrPizza