使用CRT静态链接的COM InProc服务器的资源(例如FLS索引)耗尽

时间:2013-10-06 18:06:16

标签: c++ winapi dll com crt

我认为静态链接(对于CRT,即/MT编译器选项)在构建小工具时非常方便,这要归功于轻松部署。 (Sysinternals tools像Process Explorer就是一个例子。)

然而,有人让我注意到CRT使用了几个可能在插件架构等上下文中耗尽的资源(例如shell扩展):特别是FLS index似乎是一个运行得最快的,加载第127个CRT静态链接的DLL时LoadLibrary()可能会失败。

我已经构建了一些shell扩展,但我从未遇到过这个问题。

有没有人遇到CRT静态链接的进程内COM服务器(如shell扩展)的资源耗尽问题?

如果是这样,是否存在“修复”(除了使用动态链接到CRT,这不幸使部署变得复杂,并且需要为VCRedist下载一些兆字节,而当CRT静态链接的小东西只是一些几百千字节......)。

1 个答案:

答案 0 :(得分:1)

Hmya,如果你有一个好的备份以防流星撞击破坏机器,这有点让人担心。你的shell扩展的用户不久前就已经想到了一些东西。每次使用“文件+打开”对话框时,将100多个DLL注入到进程中并不会被观察到,该程序对于世界来说已经死了5秒或更长时间。

所以要么他做了一些事情并使用像SysInternals的AutoRuns这样的工具来清理他的机器。如果您的扩展程序足够有用,那么您将幸免于难。或者用户没有采取任何对策,并且很高兴有一个严格的上限。您的扩展程序将失败,但用户无法告诉原因。您可能获得支持电话,您知道该怎么做。