2011-11-25 31 views
0

Windows-7引入了虛擬文件夾的概念,稱爲「庫」。使用c#創建windows-7庫

我正在使用自定義操作來實現庫。約束是,我必須堅持.NET版本2爲此:(

雖然環顧四周,我沒有找到任何本機(C/C++)API來做到這一點,我打算使用Interop(一旦我得到本地API,就可以創建一個庫。

任何一個指向一個鏈接或文檔可能有幫助如果我能直接從c#(使用.NET v2) 。偉大的

謝謝 約翰

+1

我認爲你的運氣與.net v2,因爲win7與3.5(如果它有幫助,發現.net v3.5版本:http://archive.msdn.microsoft.com/WindowsAPICodePack) –

+0

這可能也有幫助:http://www.codeproject.com/KB/cs/DDW7LibrariesLite.aspx –

+1

George Duckett,。淨2個應用程序將完美贏得勝利7。 – ElDog

回答

3

「虛擬文件夾」的概念已經存在的Windows 7之前,並已AFAIK剛剛被「精」 ......你寫你想與自己的自定義處理程序來做到這一點...

,如果你想實現這樣一個「虛擬文件夾」並將其集成到Windows中,以便其他應用程序可以將其用作「虛擬文件夾」然後:

要實現並安裝「shell擴展」(基本上是一堆COM接口):

備註:如果系統你a重新運行沒有.NET 4,那麼Microsoft建議不要使用.NET,因爲舊版本的固有限制是一個進程無法同時運行多個框架版本。根據操作系統等情況,可以推薦使用C/C++來實現。
即使.NET 4在註釋中指出,代碼注入問題仍然存在 - 即,如果.NET 4以前的.NET應用程序和/或使用與您的外殼擴展不同的.NET版本訪問文件打開對話框,例如可以/會失敗。
爲了規避,你需要實現一個本地代理DLL,它被加載到相應的進程(如Windows資源管理器)中,並通過IPC與.NET實現進行通信。

在這種特殊情況下,您需要構建一個實現IShellLibrary的外殼擴展。

這且不說外殼擴展的實現是一個非常艱難的工作...隨着信息/樣品/源代碼/庫等:

要與Windows 7庫看到http://support.microsoft.com/kb/976027http://www.codeproject.com/KB/miscctrl/Windows7APICodePack.aspxhttp://archive.msdn.microsoft.com/WindowsAPICodePackhttp://www.codeproject.com/KB/cs/DDW7LibrariesLite.aspx互動。有些需要.NET 3.5,但由於3.5只是2.0加上一些額外的程序集,它可能是一個選項...

+0

實際上,即使使用.net 4,.net shell擴展名也不受MS支持。如果我記得這個問題被稱爲*代碼注入*。 –

+1

@DavidHeffernan不是真的......主要問題是IIRC沒有代碼注入,但事實上所有的外殼擴展都被加載到同一個進程中......在.NET 4之前,一個進程(在這種情況下是Windows資源管理器)無法承載不同的進程.NET版本......這一點已經在.NET 4中發生了變化。 – Yahia

+0

我認爲不是。在.net 4之前,情況與您所描述的一樣。但即使在.net 4之後,代碼注入問題仍然存在,MS的官方代碼不會使用.net作爲shell擴展。這是一個爭議點,因爲問題是關於庫而不是外殼擴展。不知道爲什麼你的答案對於一個正交的話題非常關注。 –

4

,似乎最恰當的MSDN主題是:

功能是通過COM暴露,所以沒有必要對於P庫/調用。但是,由於庫僅存在於Windows 7中,並且由於Windows 7的.net 3.5作爲操作系統的一部分,因此我建議您將這部分應用程序放在.net 3.5程序集中。事實上,API CodePack程序集已經爲你做到了這一點。

當然,由於CodePack也作爲源代碼提供,因此您可以從中提取必要的部分,並根據.net 2.0進行必要的構建。