2

Windows764ビットにインストールしようとしているコピーフックハンドラーシェル拡張機能があります。

シェル拡張DLLは、32ビットと64ビットのWindows用に2つの別々のバージョンでコンパイルされます。

DLLは、必要なレジストリエントリを追加するDLLRegisterServerを実装します。

レジストリエントリを追加した後、次のコード行を呼び出してWindowsシェルに通知します。

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);

すべてがWindows732ビットでうまく機能します。シェルはすぐに拡張子を認識します。

64ビットでは、シェル拡張はシェルの再起動後にのみ認識されます。

64ビットシェルを再起動せずに拡張機能を認識させるためにできることはありますか?

4

1 に答える 1

2

結局のところ、問題は64ビットWindowsに固有のものではありませんでした。

Microsoftに相談したところ、この動作が32ビットシステムと64ビットシステムの両方のコピーフックハンドラーに影響することがわかりました。SHCNE_ASSOCCHANGED APIを使用したSHChangeNotify()は、シェルがコピーフックハンドラーをリロードしないようです。

Microsoftの担当者によると:

シェルは、プロセスでコピーフックハンドラーが最初に呼び出されたときに、登録されたコピーフックハンドラーのリストを作成してキャッシュします。リストが作成されると、プロセスを終了する以外に、キャッシュを更新またはフラッシュするメカニズムはありません。これは、Windowsエクスプローラー、およびSHFileOperationなどのシェルファイル関数を呼び出す可能性のあるその他のプロセスに適用されます。この時点で提供できる最善のオプションは、コピーフックハンドラーが登録された後にシステムを再起動することです。

これが誰かに役立つことを願っています!

于 2010-01-26T00:34:12.793 に答える