2010-09-08 41 views
14

我試圖創建在C++中使用Visual Studio 2010的太簡單了外殼擴展,但我甚至不能似乎得到的例子在那裏爲起點的工作。在Visual Studio中製作一個Windows外殼擴展2010

我正在使用Windows 7 x64。

我試過this Visual Studio template,但一旦我得到模板在VS2010中工作,我有一系列錯誤,我不知道如何解決。

我試過The Complete Idiot's Guide to Writing Shell Extensions,一旦演示編譯所有正確的註冊表設置等創建,但似乎沒有上下文菜單。

我已經看了this C# COM Interop example,但我已經離開了困惑,是否可以安全使用C#感謝this article *,但它看起來像如果我使用.NET 4中,因爲it supports in process side-by-side CLR hosting我可能會確定。

  • 簡而言之:歷史上兩個版本的.NET不能在同一個進程中運行,並且shell擴展的工作方式是將自己注入進程。因此,如果.NET 3.5被注入.NET 2進程 -

那麼,我現在可以使用.NET 4.0嗎?

是否有一個工作的,可下載的VS2010解決方案,添加了一個簡單的shell擴展?

我以前在C++回來的時候並不是那麼糟糕,但是經過多年的模擬.NET之後,我很生疏,因此,擺弄細節以解決我遇到的大量錯誤在現有的例子證明...... fiddly!

我真的可以做一個乾淨的石板開始,我可以打破自己,並找出什麼做錯了!

+0

是的,您現在可以使用.NET 4.0。並行的並行過程非常明確地被髮明來支持這種用法。 – 2010-09-08 19:24:39

+0

@Hans - .NET 4將會注入到.NET 2中,並且所有的都會存活下來? – joshcomley 2010-09-08 19:38:10

+0

並排,不注射。 – 2010-09-08 19:42:52

回答

7

我這個掙扎了一會兒,限制了與代碼項目的文章的成功是由於64位的問題和SDK的差異。

最近,我選擇了項目向上追溯,並開始在使用MS all-in-one代碼示例,我感到非常高興。它使一個簡單的例子,上下文菜單和x64開箱的:http://code.msdn.microsoft.com/windowsdesktop/CppShellExtContextMenuHandl-410a709a

爲了得到它運行你的機器上:

  1. 將通過所有功能於一身的樣本瀏覽器下載代碼或使用直接鏈接。
  2. 在VS下管理員權限打開項目
  3. 交換機構建的配置到x64,並建立它
  4. 殺死所有的探險會議
  5. 找到新的DLL和regsvr32.exe的運行。\ CppShellExtContextMenuHandler.dll
  6. 打開資源管理器再次右鍵單擊一個.cpp文件中看到新的菜單
  7. 通過運行帶有/ u標誌相同的命令

我的下一個步驟將其刪除是讓德竊聽工作,我覺得這可能做的伎倆:msdn

1

在用於C++擴展的Windows 7 x64上,您需要將其構建爲x64項目。在Visual Studio 2010中,ATL嚮導中有一個選項用於創建提供預覽窗口支持,縮略圖和Windows搜索支持的外殼擴展項目。我最近使用過它,一旦建成,似乎沒有任何事情發生。但是,切換項目配置以構建一個x64 dll讓它工作。

關於使用.Net - Explorer現在在單獨的子進程中啓動插件。因此,加載鏈接到.net 4.0的外殼擴展並不會污染該.net版本的所有內容,因爲只有託管子進程將實際加載該CLR。你可以使用預覽擴展看到這一點,因爲啓動一個新的進程(prevhost)來包含它。

+0

您需要安裝32位和64位版本,以便您的32位應用程序也可以獲得擴展名。 – 2011-02-25 22:24:45

+0

請注意,您不能依賴Windows XP中的資源管理器子進程加載。在那裏,如果.NET 2插件首先加載,.NET 4將會因加載錯誤的運行時而失敗。如果.NET 4首先加載,.NET 2將會正常加載,因爲.NET 4支持並行運行時。 – 2011-05-04 14:29:37

0

我得到這個工作:http://www.codeproject.com/Articles/174369/How-to-Write-Windows-Shell-Extension-with-NET-Lang

確保您使用德權RegAsm.exe /註冊它:

  • 32位平臺:編譯爲x86 /任何CPU。使用C:\Windows\Microsoft.NET\Framework\vXYZ\RegAsm.exe
  • 64位平臺:編譯爲x64 /任何CPU。使用C:\Windows\Microsoft.NET\Framework64\vXYZ\RegAsm.exe

XYZ是你用於編譯的.NET Framework的版本。)

注意,但是,Microsoft recommends against using .NET for shell extensions

0

你可以使用C#的簡短答案是否定的。這是來自微軟實施進程擴展的指導。 「一個特別注意的運行時間是公共語言運行庫(CLR),也稱爲託管代碼或.NET Framework。Microsoft建議不要將受管理的進程內擴展寫入Windows資源管理器或Windows Internet Explorer,並且不會將其視爲受支持的方案「。 問題出現是因爲在應用程序中只能使用單個版本的.NET,並且如果使用多個.NET擴展,則無法強制執行此限制。

相關問題