次のような小さなツールを書きたいのですが。
特定のファイル拡張子を持つファイルを右クリックすると、Windowsエクスプローラーのコンテキストメニューに追加のエントリが表示されます。
このエントリをクリックすると、特定のEXEがこのファイルをパラメータの1つとして起動されます。
これにはC#/。NET 2.0を使用したいと思います。それが不可能な場合は、C++/Win32でも実行できます。
私の質問は:
レジストリにアクセスし、メニュー項目を表示する項目に応じて、root\\File\\Shell
またはroot\Folder\\Shell
の下にキーを追加する必要があります。
CodeProjectのこの記事 を試してみてください。非常に便利です。
編集: ここに別の記事 があります。
現在、同じプロセスで複数のランタイムバージョンをホストできないため、シェル拡張に.NETを使用することはサポートされていません(.NET 4ではこの制限が解除されます)。
2つのシェル拡張がある場合を考えます。 1つは.NET 3.5用、もう1つは.NET 1用です。どのランタイムがプロセスにロードされますか?まあ、それは多かれ少なかれランダムです-それはどのシェル拡張が最初にロードされるかに依存します。 2.0ランタイムの場合もあれば、1.1ランタイムの場合もあります。
これは、.NETプログラムが共通のファイルダイアログを作成する場合の問題でもあります。シェル拡張が読み込まれる場合と読み込まれない場合があり、正しいランタイムバージョンで実行される場合とされない場合があります。
そのため、 シェル拡張ルート を使用する場合は、ネイティブC++/COM/Win32を使用する必要があります。