我们有一个使用 COM 对象与电子邮件包通信的 VB6 应用程序。该应用程序自主运行,并且每隔一段时间,COM DLL 似乎就会被取消注册。快速调用 RegSvr32,系统恢复正常。我们尝试实现一个快速修复,每次应用程序需要它时注册 DLL,但这似乎没有奏效。
这已经变得相当烦人了。
如果您想知道应用程序只是调用一个 shell 命令。
Shell "regsvr32 /s " & """" & pathName & """"
有谁知道什么会导致 COM DLL 未注册?
我们有一个使用 COM 对象与电子邮件包通信的 VB6 应用程序。该应用程序自主运行,并且每隔一段时间,COM DLL 似乎就会被取消注册。快速调用 RegSvr32,系统恢复正常。我们尝试实现一个快速修复,每次应用程序需要它时注册 DLL,但这似乎没有奏效。
这已经变得相当烦人了。
如果您想知道应用程序只是调用一个 shell 命令。
Shell "regsvr32 /s " & """" & pathName & """"
有谁知道什么会导致 COM DLL 未注册?
由于病毒扫描程序和反间谍软件,我看到 COM DLL 发生了奇怪的事情。如果可以,请尝试禁用这些应用程序(如果有)。
只是一个猜测,但 DLL,或者更可能是同一 DLL 的另一个版本,是在不同的文件位置注册的吗?对于 COM DLL,如果它是相同版本并且被正常调用(通过 GUID 或名称),我认为这无关紧要,但值得检查。
我现在确实有解决这个问题的办法。电子邮件包是 Outlook,这是问题的关键。COM 对象实际上并没有在系统中取消注册,它未能在 Outlook 中加载,这似乎是一种更常见的情况,尽管仍然很少见。显然,在某些奇怪的情况下,Outlook 将停止加载 COM 插件。
有关知识库文章KB945743的链接
解决方案是从 Outlook 中卸载 COM 对象并重新加载它。
或者某些东西正在取消注册,或者同一个 com 对象的新旧版本正在运行并在可执行文件的同一路径中自动注册 com,这很奇怪,但这可能会发生
如果两个应用程序都执行,其中一个将不会运行,一个将失败
如果 com 文件位于可执行文件的同一路径中,则 VB6 com 文件会自动注册