39

次のような小さなツールを書きたいと思います。

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

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

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

私の質問は次のとおりです。

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

2 に答える 2

26

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

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

編集:ここに役立つかもしれない別の記事があります。

于 2009-12-03T09:57:54.787 に答える
3

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

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

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

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

于 2009-12-03T10:05:35.007 に答える