对 DeskBand 编制者的一个好消息

通常,如果我们实现了一个 DeskBand,在卸载或者升级的时候通常会因为删除不掉相应的 DLL 文件而苦恼。很久以来就发现 Windows Media Player 自带的 DeskBand 却不存在此问题,如果你从任务栏的关联菜单中把它的选中状态去掉,几乎马上就可以删除 wmpband.dll 这个文件。

曾经跟踪过几次,但每次都浅尝则止,今天终于横下一条心,决心跟踪到底。果然皇天不负有心人,结果简单的和 1 一样,示例代码如下:

如果任务栏收到此消息,则会立刻调用 CoFreeUnusedLibraries 函数,将不再使用的动态链接库释放掉。

但是好像加载的其他外壳扩展(例如关联菜单扩展)不行,不知为何。接着试!

更新(2005-02-18 10:23):调试发现,关联菜单扩展的 DLL 的 DllCanUnloadNow() 函数也被调用了,而且返回值的确是 S_OK,但 CoFreeUnusedLibraries() 函数就是不对该 DLL 调用 FreeLibrary(),好像还要进行若干其他判断,实在搞不懂。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注