Han*_*ant 10
你会得到很多建议,为没有在C#中做到这一点.我不能建议,你的桌面带不能工作的几率很大.问题是CLR版本注入问题,一个进程(如explorer.exe)只能加载一个版本的CLR.如果版本错误,您的桌面带将无法正常工作.
在.NET 4.0中添加了针对此问题的非常具体的对策,其CLR支持CLR的进程内并行版本.换句话说,在一个进程中加载了多个CLR.该功能适用于此特定方案,即需要CLR的COM服务器,因为它是用托管代码编写的.因此绝对要求您编写针对.NET 4.0或更高版本的扩展.
但是仍然存在遗留问题,而且微软仍然不支持shell扩展的这种情况的核心原因.有一个"谁先来"的问题.尽管警告没有这样做,但有一些shell扩展使用托管代码和目标CLR版本2.如果这样的扩展在你的之前加载,一个完全随机的事件,因为它取决于注册表中的键的顺序,资源管理器可能会首先加载CLR 2.这会阻止进程并行功能的工作,只有在首先加载CLR版本4时才能达到良好的目的.
这是完全不可识别的,当无法加载扩展时,资源管理器不会发出吱吱声.对普通用户来说无法修复,你不能指望他修补一些模糊的注册表项.
在完全解除这个问题之前需要花费很多时间.实际上,Windows需要在.NET 4之前停止支持.NET版本才能获得保证.Windows 8首先没有安装.NET 3.5,但它仍然可以很容易地添加它.所以要花很多时间,十年或更长时间.
那么,请注意风,如果你不担心随机故障,你可以使它在C#中工作.接下来你将被隐藏在非常模糊的COM接口细节中,幸存下来需要黑带技能,知道如何正确声明[ComImport]接口.这不是你应该自己解决的问题,而是由其他人完成的.我不习惯推荐产品,但不能跳过推荐EZShellExtensions,这是一个专门用于帮助在C#中编写shell扩展的库.支持deskband是其广告功能之一.使用试用版来修补它,看看你是否可以把它带到一个好的结局.