2011-07-12 99 views
5

我目前正在嘗試創建一個自定義Shell命名空間擴展(用於呈現包含「子文件夾」和「文件」的虛擬文件夾,它實際上是分層樹中數據的表示形式來自遠程服務的結構)。這個擴展名是C#編寫的,我知道這個擴展名是個不錯的主意,但是自從.NET 4引入了不同版本的.NET運行時在同一個進程中共存的可能性以來,我想到了這一點限制不再是一個問題。Shell命名空間擴展無法在Windows 7中加載

到目前爲止,我已經通過遵循網絡上提供的大量示例和參考資料,在Windows XP中正常工作,但是當我在Windows 7中嘗試它時(我還沒有在Vista中嘗試過它,所以我不不知道它是否會在那裏工作),擴展沒有加載。根據我的調試日誌輸出,它的寄存器很好,但是當我打開一個Windows資源管理器窗口時,沒有任何通常的COM接口調用似乎發生(通常以IPersistFolder :: Initialize開始)。實際上,甚至不會調用類構造函數。我不知道接口是否被查詢(成功與否),因爲我不知道如何在.NET中檢測到,因此我可以記錄它。所以,基本上,我沒有任何線索可以通過,因爲即使在我有機會記錄關於可能出錯的任何有用信息之前它也會失敗。

有沒有人碰巧有什麼想法可能是什麼問題?在處理我應該注意的shell命名空間擴展時,Windows 7中是否有任何與Windows XP相反的特性?如果需要更多的細節,請隨時詢問(我試圖保持簡短,因爲我確信沒有人會喜歡我複製&粘貼我的整個代碼在這裏,我不能削減到相關的部分,因爲我根本就不知道這些是哪些......)

+2

這個......擴展名編譯爲32位,而Windows 7是64位?.. – GSerg

+0

不,這是一個32位的Win 7;我希望這個解決方案很簡單... –

+0

這並不回答你的問題,但.NET命名空間擴展不支持.NET http://msdn.microsoft.com/en-us/library/windows/desktop/dd758089( v = vs.85)的.aspx。 –

回答

0

這可能是由於以下原因:

  1. 貴命名空間都依賴任何可能加載失敗?

  2. 註冊是否成功?如果創建了正確的條目,您是否真的檢查過註冊表?請記住,如果UAC處於啓用狀態,您可能需要提升權限。


作爲替代自己開發這樣複雜的野獸,可以考慮使用EZNamespaceExtensions - 這使得它非常容易,你可以專注於提供特定NSE-功能。

免責聲明:我們是EZNamespaceExtensions的開發者。

+0

註冊表項全部看起來不錯。就依賴關係而言,擴展只使用.NET 4運行時(當然這是安裝的)。不幸的是,無論如何,我不知道如何確定是否需要加載或不加載。順便說一句,系統事件日誌中沒有提供任何提示。我覺得我在霧中被蒙上眼睛... –

+0

EZNamespaceExtension.NET的大問題。它尚未更新很長時間。 LogicNP似乎已經失去了對EZNamespaceExtension.NET的興趣,因爲自2010年以來,還沒有發佈新的少數功能。沒有.NET 4支持,也不支持Windows 8功能區工具欄。 – tronda

+0

儘管沒有新的主要版本(沒有必要),但我們不時進行小版本更新。 .Net 4.0:再次不真實 - 事實上,對於並行運行時.Net 4.0的支持,在.Net中開發nses變得更簡單了! Win8功能區:MS尚未記錄該API來執行功能區集成。如果您有相關文檔的鏈接,請分享,以便我們添加此功能。 – logicnp

3

我剛纔有一個非常類似的案例:

  • 我看到在正確的位置我的外殼擴展(在我的情況「我的電腦」),圖標和一切。
  • 不過,沒有實例化我的COM類(我檢查過程監視器),並沒有調用IPersistFolder :: Initialize。

我使用的是ATL和64位,所以我知道.NET不是我的問題。

原來,問題是我沒有在註冊表中的以下值: [HKEY_CLASSES_ROOT \ CLSID \ {您的CLSID} \ ShellFolder] 「屬性」= DWORD:20000000

(這是不夠的有鑰匙或價值存在 - 你需要(至少)這個特定的屬性值來開始一些事情)。

添加它後,您需要終止所有explorer.exe進程並再次啓動一個(例如,使用任務管理器)。我希望這也能解決你的問題。