2010-01-22 65 views
2

我有一個複製掛鉤處理程序外殼擴展,我試圖安裝在Windows 7 64位。外殼擴展安裝無法識別的Windows 7 64位外殼

對於32位和64位Windows,shell擴展DLL被編譯爲兩個單獨的版本。

該DLL實現了DLLRegisterServer,它添加了必要的註冊表項。

添加註冊表項後,調用下面的代碼行nofity Windows外殼程序:

SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); 

一切的偉大工程上的Windows7 32位。 shell立即識別擴展名。

在64位上,外殼擴展只在外殼重新啓動後才被識別。

有什麼我可以做的,導致擴展被識別而不重新啓動64位外殼?

+0

此問題似乎也影響Vista 64位。 – Avalanchis 2010-01-22 20:19:43

回答

2

事實證明,該問題並非特定於64位Windows。

在諮詢了Microsoft後,我瞭解到此行爲會影響32位和64位系統中的複製掛鉤處理程序。 SHChangeNotify()與SHCNE_ASSOCCHANGED API顯然不會導致shell重新加載複製掛鉤處理程序。

據微軟的代表:

外殼建立並緩存在第一時間複製掛鉤處理程序中調用的過程中註冊的複印掛鉤處理程序的列表。一旦創建了列表,除了終止進程之外,沒有更新或刷新緩存的機制。這適用於Windows資源管理器和任何其他可能調用shell文件函數的進程,如SHFileOperation。我們現在可以提供的最佳選擇是在複製掛鉤處理程序註冊後重新啓動系統。

希望這可以幫助別人!