首页 文章

如何在中途注册COM组件?

提问于
浏览
1

我正在使用Visual Studio 2008部署(安装)项目构建安装程序 . 该项目具有启动条件“Privileged”,因此只有管理员才能运行它 . 它使用第三方提供的合并模块来注册COM组件 . COM组件通过.NET互操作DLL公开,而后者又由我正在构建安装程序的程序使用 . (细节:这是一个安装QBFC框架的Intuit合并模块) .

安装完成后,无法加载COM组件 . 错误是"class not registered" . 但是当我进入注册表时,我可以看到所有正确的条目都在 HKEY_CLASSES_ROOT\CLSID\{the class id} 下 - 其中类id与错误消息的类ID匹配 . 如果我然后在管理模式下打开命令提示符并使用Regsvr32重新注册DLL服务器,一切都已修复,但我看不到任何更改 KEY_CLASSES_ROOT\CLSID

当我使用进程监视器检查系统时,它正在获取类未注册错误,我可以看到应用程序在尝试打开CLSID时出现“找不到名称”错误,即使CLSID肯定存在(I有双重和三重检查) . 我认为这必须与权限有关 . 另一种理论是,“类未注册”消息可能来自一个依赖组件,但这并不能解释我在进程监视器中看到的内容 .

所有这些测试结果都来自Windows 7 Ultimate 32位操作系统 .

你会采取什么步骤来解决这个问题?

1 回答

  • 2

    可能的一件事是组件类别缓存的问题 . 这是一个很长的镜头,但是如果你在安装中添加一个步骤来删除 HKEY_CLASSES_ROOT\Component Categories\ 下的键有帮助吗?如果是这样,您需要确定需要删除哪个comcat缓存(即您的对象正在使用哪个) .

    您可以做的另一件事是导出整个注册表,执行安装,导出注册表,执行regsvr32事务,导出注册表 . 然后windiff导出的注册表文件的每个修订版 . 这可能会让你知道至少会发生什么变化 .

    最后,如果是64位计算机,请确保正确进行64位注册 .

相关问题