在构建 Windows Explorer shell 扩展(当前使用 VS2010 SP1)时,您建议使用静态链接(到 CRT、C++ 运行时和其他支持库,如 ATL)还是动态链接?
静态链接选项的好处之一是使部署更容易(实际上,通过这种方式,可以只部署 shell 扩展程序内 COM 服务器 DLL,而无需外部依赖于其他 C/C++ 运行时DLL)。
在动态链接的情况下,如果msvcr100.dll
、msvcp100.dll
等 DLLWindows\System32
被 shell 扩展使用,好处是如果 Microsoft 在这些 DLL 中修复了某些内容(例如安全修复),自定义 shell 扩展会自动使用这些修复。
然而,坏事是那些“全局”修复也可能在依赖代码中引入错误和破坏事物。
至于VCRedist DLL 的应用程序本地部署,我不确定它在外壳扩展的情况下如何工作。应该在 shell 扩展 COM DLL 中嵌入什么样的清单来引用 shell 扩展文件夹下的 VCRedist DLL?