1

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

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

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

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

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

4

1 回答 1

2

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

您可以做的另一件事是导出整个注册表,进行安装,导出注册表,执行 regsvr32 操作,导出注册表。然后对导出的注册表文件的每个版本进行windiff。至少,这可能会让您了解发生了什么变化。

最后,如果它是 64 位机器,请确保您正确地进行 64 位注册。

于 2011-07-09T00:56:56.720 回答