我在CodeProject(http://www.codeproject.com/KB/cs/Issuewithbandobjects.aspx)处理样本并且一切正常,我正在使用gacutil和regasm来测试工具栏,这是有效的 . 然后我转向使用Wix来测试实际部署并构造msi文件,这意味着切换到Heat .

最初,我为各种dll创建了片段,这种方法很好,手动将 <... assembly=".net" ...> 属性添加到各种wxs文件中 . 但是,为了进一步准备它进行部署,我最终重命名了项目和DLL文件名,更改了GUID 's from the samples 2 dll'并在此之后,还尝试测试升级主版本号 . 更改了dll后,我还使用Heat重新生成wxs文件,手动添加必要的属性 . 但是,现在工具栏不再在IE中加载,即使选项存在 . 它无声地失败了 .

在检查注册表项时,使用OLEVIEW.exe,我可以创建旧项目dll的实例并访问它使用gacutil和regasm注册的COM接口 . 但是,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版本首先被移除) .

我很茫然 . 希望有人可以了解情况 .

最诚挚的问候,丹尼尔 .