我一直在尝试使用 WiX 3.7 来安装 COM +程序集。我一直在使用StackOverflow上的几个WiX代码片段。虽然我可以生成一个MSI,但是当我安装msi时它会失败并出现如下错误:
RegisterComPlusAssemblies: DLL: C:\Program Files\Kutana\Kappris\Carson.dll
ComPlusInstallExecute: ExceptionInfo: Code='0', Source='System.EnterpriseServices', Description='Could not install type library 'C:\Program Files\Kutana\Kappris\Carson.tlb' into application 'COM+ Carson - Kappris Print Cache'.', HelpFile='', HelpContext='0'
ComPlusInstallExecute: Error 0x80020009: Failed to invoke RegistrationHelper.InstallAssembly() method
ComPlusInstallExecute: Error 0x80020009: Failed to register .NET assembly
ComPlusInstallExecute: Error 0x80020009: Failed to register assembly, key: MyComPlusAssembly
ComPlusInstallExecute: Error 0x80020009: Failed to register assemblies
无论我尝试什么,我都无法用WiX做到这一点。我知道其他人在使用WiX安装COM +时遇到了同样的问题,但我认为没有人会比指责WiX更进一步。
我想知道从组件服务控制面板手动导出COM +应用程序是否可行,这将创建一个MSI安装程序。然后我可以使用dark.exe从MSI生成WiX源代码。
我实际上已经完成了这个,我可以构建一个安装COM + App的MSI。但这是个好主意吗?
我有疑虑:首先,组件现在已在GAC中注册,即使我使用regsvcs手动注册程序集时,它也不在GAC中。其次,导出的MSI包含三个文件--dll,其关联的tlb和另一个'APL'文件,这是一种未记录的内部格式,作为导出的副作用生成。
使用这种安装COM + App的方法,人们可以看到什么问题?我是否应该担心我对APL文件一无所知?如果你能告诉我如何使用WiX做到这一点,我会很高兴。只是希望能够进行安装......
答案 0 :(得分:0)
我只处理过COM +几次,即使我是一位经验丰富的设置开发人员。处理起来似乎非常混乱,记录极其糟糕,最糟糕的是:导致间歇性问题 - 最糟糕的调试问题,因为我在不同的MSI运行中遇到了不同的结果。一般来说它有效,但有时会崩溃,然后在某些时候反复崩溃。我测试了很多。我的结论是,由于COM +是分布式事件的某种事件队列(我不太了解该技术),因此在每次设置运行期间都有很多混淆变量的机会。
我相信我最终在某一时刻使用了组件服务中导出的MSI,而在其他方面,我在系统上设置了COM +应用程序,并在构建时将其导入Installshield。我记得两种方法都存在问题。我不记得所有的细节,很久以前。 Installshield注册的COM设置少于组件服务中导出的COM dll。即使在与Installshield支持人员交谈之后,我也从未想出原因。还必须在构建系统上正确安装应用程序才能导入它。
如果我是你,我会按原样使用导出的MSI,也可以与安装其余应用程序的其他MSI一起单独运行 - 将其全部嵌入批处理文件或使用引导程序。我绝对记得尝试更改导出的MSI并在此过程中重复中断。 APL文件未正确应用于COM +应用程序的某些问题。再说一遍:记录极差,我从来没有想过它为什么会发生。
很抱歉没有得到更多帮助,但我仍然会发布此信息以确保此信息在那里并且人们知道他们与COM +的关系。 使用组件服务中导出的MSI是我的建议,导出后不要触摸它。