我是 Wix 的新手,我遇到了一个我显然无法自己解决的问题,因此非常感谢任何帮助。
背景简介:我代表一家软件供应商构建一套全面的基于 SOA 的应用程序,用于在大型企业中部署。我们的架构由许多可以独立安装/升级的层组成,所以我正在构建几个安装程序,从头开始组成(如:平台、核心框架组件、服务层、业务层、应用程序层等)。
软件版本:
-Wix 3.5.1309.0 (wix.dll)
- Visual Studio 2008、.Net 3.5
- 构建操作系统:Windows 2008 R2 Standard 64 位
- 部署操作系统:Windows 2008 Standard 32 位
我的问题是关于在 COM+ 应用程序中安装 .Net 程序集。我不断收到错误“无法安装类型库”。我一直在阅读我能找到的所有文档,而且我已经用谷歌搜索了好几天了。我找到了很多关于这个主题的帖子,但我仍然无法解决这个问题。
为了隔离问题,我已将问题提取到单独的安装程序中。首先我运行主安装程序:
1. 将所有程序集安装到 GAC 中,包括要安装在 COM+ 中的程序集。
2. 创建本地用户和组。
3. 创建目标 COM+ 应用程序,包括角色等。
4. 在文件夹中安装目标程序集和配套类型库(以消除任何 GAC 查找问题)
这个安装程序我可以安装/修复/卸载,一切正常。
然后我运行仅包含问题的最小安装程序,它尝试:
1. 在现有 COM+ 应用程序(服务器)中安装程序集,引用预安装的 .dll 和 .tlb。
安装失败,日志显示:
MSI (s) (AC:64) [19:16:01:127]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI1BAB.tmp, Entrypoint: ComPlusInstallExecute
ComPlusInstallExecute: ExceptionInfo: Code='0', Source='System.EnterpriseServices', Description='Could not install type library 'c:\Program Files\MyManufacturer\ComPlus\WDA.ServiceProviders.Update.11.tlb' into application 'WDA.ServiceProviders.Update.11'.', 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: MyAssembly
ComPlusInstallExecute: Error 0x80020009: Failed to register assemblies
Action ended 19:16:02: InstallFinalize. Return value 3.
我还注意到回滚会删除 COM+ 应用程序,即使它不是由此安装程序创建的。
我可以使用服务器管理器从安装程序引用的同一物理文件手动安装程序集。从 COM+ 应用程序中手动删除组件后,安装程序就可以工作了!
另外,为什么我必须首先提供一个类型库?EnterpriseServices.RegistrationHelper 无论如何都会动态生成类型库。
这是失败的最小测试安装程序:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:complus="http://schemas.microsoft.com/wix/ComPlusExtension"
>
<Product Id="48EDB258-BD84-47EF-94A2-B4950EE48139"
UpgradeCode="F29B8EBD-DFD1-4B7E-96FF-86842CAAE4A4"
Name="ComPlusInstalls"
Language="1033"
Version="1.0.0"
Manufacturer="MyManufacturer">
<Package Id="ABA41719-BC28-4A57-BA9A-58F4F3B2194F" InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="WixTest.cab" EmbedCab="yes" />
<complus:ComPlusApplication Id="MyApplication" ApplicationId="1FCF220A-A1FE-44FE-BE91-B37341BA6D4A" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="MyManufacturer" Name="MyManufacturer">
<Directory Id="INSTALLLOCATION" Name="ComPlus">
<Component Id="MyComponent" Guid="6D46A007-6669-487B-BAA0-DFA7314C141D" KeyPath="yes">
<complus:ComPlusAssembly Id="MyAssembly" Type=".net" Application="MyApplication"
RegisterInCommit="no" DllPathFromGAC="no"
DllPath="[INSTALLLOCATION]WDA.ServiceProviders.Update.11.dll"
TlbPath="[INSTALLLOCATION]WDA.ServiceProviders.Update.11.tlb"/>
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
<Feature Id="MainFeature" Title="WixTest" Level="1" Absent="disallow" InstallDefault="local">
<ComponentRef Id="MyComponent" />
</Feature>
</Product>
</Wix>
干杯,
-尼尔斯