1

我正在为 Internet Explorer 开发一个 .NET BandObject 工具栏。我正在处理 CodeProject ( http://www.codeproject.com/KB/cs/Issuewithbandobjects.aspx ) 的示例,一切正常,我正在使用 gacutil 和 regasm 来测试工具栏,并且工作正常。然后我开始使用 Wix 来测试实际部署并构建 msi 文件,这意味着切换到 Heat。

最初,我为各种 dll 创建了片段,并且手动将<... assembly=".net" ...>属性添加到各种 wxs 文件中,这一切正常。然而,为了进一步为部署做准备,我最终重命名了项目和 dll 文件名,从示例 2 dll 中更改了 GUID,然后,还尝试测试升级主要版本号。更改了 dll 后,我还使用 Heat 重新生成了 wxs 文件,手动添加了必要的属性。但是,现在工具栏不再在 IE 中加载,即使该选项在那里。它默默地失败了。

在检查注册表条目时,使用 OLEVIEW.exe ,我可以创建旧项目 dll 的实例并访问它的 COM 接口,该接口使用 gacutil 和 regasm 注册。但是,Wix 安装的文件无法加载,并出现以下错误:

CoGetClassObject failed.
The system cannot find the file specified.
severity: SEVERITY_ERROR, facility: FACILITY_WIN32 ($80070002)

我怀疑这是因为新的 COM 对象由于某种原因没有被 Wix 或 msi 安装过程正确注册。这是因为在比较 OLEVIEW 中的新旧 dll 时,新 dll 具有以下形式的注册表项:

InprocServer32[CodeBase]=file///C:\Release\MyProject.dll
--1.0.4279.39243[CodeBase]=file///C:\Release\MyProject.dll

旧的 COM 对象没有这些行。这表明即使它已安装到 GAC,它也没有正确注册。更令人困惑的是,以前可以使用的旧 msi 安装文件在安装后也会失败(所有以前的 Wix 版本都首先被删除)。

我很茫然。希望有人可以阐明情况。

最好的问候,丹尼尔。

4

0 回答 0