Shell命名空间扩展。 C#。 C ++,MFC,AT-用什么?

我们需要创建一个Shell命名空间扩展。 我在2005年离开了Windows编程,那时我不得不创建简单的shell扩展,但是构建了非常复杂的COM服务器(进程内和进程外)和桌面应用程序。 我们使用了ATL和MFC库。

时间已经过去了,现在我需要回到visual studio / windows编程。 我期待能够忘记所有关于ATL,MFC和C ++,使用C#在de CLR中创建应用程序。

我记得找到优秀的ATL / MFC开发人员确实非常困难,而且大部分时间我都要完成整个工作。 所以我现在想象一下,在.NET时代,找到可以帮助我的ATL / MFC开发人员真的是不可能的。

我刚刚在MSDN Library中看到过: http : //msdn.microsoft.com/en-us/library/dd758089%28v=VS.85%29.aspx

“Microsoft建议不要编写托管的Shell扩展,并且不认为它们是受支持的方案。”

哦不,不,不……我很兴奋并期待使用C#,WindowsForms甚至WPF,他们说我做不到。

那么如果我想创建一个Windows非托管C ++应用程序,MFC / ATL是唯一的选择吗? 在6年内没有任何改进是真的吗? 所以我必须使用相同的旧技术?

我现在正在寻找Visual Studio 2010中更好的选项,似乎对于C ++非托管应用程序,我们仍然必须使用MFC或ATL。 我的问题是,这是否真的是唯一的方法。

现在我们假设我们必须使用旧的MS库,Shell Extensions都是关于COM接口的,我认为更好的选择是ATL。

但也许我们需要包含一些窗口和一些UI控件。 我记得你可以为ATL项目添加MFC支持或者为MFC项目提供ATL支持。 我知道我曾经使用过那种东西,但很久以前。 你能告诉我什么是更好的选择。

非常感谢Java爱好者和C ++怀旧。

在过去的6年中,MFC已经发生了变化, function包是一个很大的改进。 对MFC(V9)和MFC V10的更改发生了变化

此外ATL / MFC已经融合了一段时间,虽然我不会上下推荐MFC而不是C#/ WPF,它比2003年好很多。

如果我今天正在编写shell扩展,我将使用ATL开始,如果我需要MFC,我会向ATL添加MFC支持

虽然可以在托管代码中创建shell扩展,但这不是一个好主意,因为如果多个扩展使用不同版本的.NET框架,您可能会遇到版本问题。 原因是shell扩展是在进程中加载​​的,而进程只能加载一个版本的框架。

带有ATL的C ++将是我的首选,MFC第二。 您也可以用C语言编写它,但这只是很多工作。 您也许可以使用Delphi(非托管)或其他语言。

关于logicnp答案的说明,因为我没有代表发表评论……

即使使用.net 4.0,Microsoft建议不要使用托管代码: Microsoft建议不要将托管进程内扩展写入Windows资源管理器或Windows Internet Explorer,并且不认为它们是受支持的方案。

来自: http : //msdn.microsoft.com/en-us/library/dd758089%28v=VS.85%29.aspx 。

最初当.net 4.0出现在那里时,我认为微软内部存在很多混淆。 MSDN文章logicnp在他的回答中链接 – 确实说你可以使用.net – 就是一个例子。

您仍然可以使用.net来编写进程扩展,例如预览处理程序和(我认为)缩略图处理程序。

Code Project上有一个关于这个主题的非常好的系列: 完整的白痴编写Shell扩展指南 。 它已经有几年了,但它仍然具有相关性。 我从那里开始!

请参阅我们的KB for EZNamespaceExtensions.Net中的以下内容 ,该产品可以非常轻松地在.Net中开发名称空间扩展。

命名空间扩展可以由任意进程加载,在.Net运行时v4.0之前,针对.Net运行时的一个版本构建的托管代码无法在已加载另一版本的运行时的进程中运行。

最新的.Net 4.0 / VS 2010运行时完全支持.Net 4.0运行时(以及所有未来运行时)与早期.Net运行时的进程内并行加载。 请参阅以下摘自http://msdn.microsoft.com/en-us/magazine/ee819091.aspx “由于能够在任何其他运行时使用多个运行时,我们现在可以为编写托管shell扩展提供一般支持 -甚至那些在机器上运行任意应用程序的进程。“

即使您使用.Net 3.5或更早版本(VS 2008或更早版本)开发名称空间扩展,如果您的名称空间扩展将分发给普通公众,这只是一个问题。 如果您的命名空间扩展将在公司内部或类似的受控环境中部署(通常是命名空间扩展的情况),那么这根本不是问题。 在这种情况下,由于您知道将在公司的计算机上安装.Net运行时的哪个版本,因此您可以使用相应的工具进行开发。 例如,如果您公司的计算机安装了.Net 2.0运行时,那么您可以使用Visual Studio 2005安全地开发命名空间扩展。如果您公司的计算机只安装了.Net 1.0 / 1.1运行时,那么您应该使用VS 2002 / VS在编译时(使用MSBuild或各种广泛可用的设置文件),您甚至可以在使用Visual Studio 2005时瞄准1.0 / 1.1运行时。

免责声明:我为LogicNP Software工作,他是EZNamespaceExtensions.Net和EZNamespaceExtensionsMFC的开发人员。