Wix - ComPlusAssembly - Не удалось установить библиотеку типов

Я новичок в Wix и столкнулся с проблемой, которую, очевидно, не могу решить самостоятельно, поэтому любая помощь будет очень признательна.

Краткая справка: я представляю поставщика программного обеспечения, создающего комплексный набор приложений на основе SOA для развертывания на крупных предприятиях. Наша архитектура состоит из множества уровней, которые можно устанавливать/обновлять независимо друг от друга, поэтому я создаю несколько установщиков, составляя их с нуля (такие как: платформа, основные компоненты фреймворка, сервисный уровень, бизнес-уровень, прикладной уровень и т. д.).

Версии программного обеспечения:
— Wix 3.5.1309.0 (wix.dll)
— Visual Studio 2008, .Net 3.5
— Сборка ОС: Windows 2008 R2 Standard, 64-разрядная
— Развертывание ОС: Windows 2008 Standard 32 бит

Моя проблема связана с установкой сборок .Net в приложениях COM+. Я продолжаю получать сообщение об ошибке «Не удалось установить библиотеку типов». Я прочитал всю документацию, которую смог найти, и уже несколько дней гуглю. Я нашел довольно много сообщений по теме, но я все еще не могу решить проблему.

Чтобы изолировать проблему, я извлек проблему в отдельный установщик. Сначала я запускаю основной установщик:
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+ установщик работает!

Кроме того, почему я должен предоставлять typelib в первую очередь? В любом случае 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>

С уважением,
-Нильс


person Nils-Petter Ottesen    schedule 01.02.2010    source источник


Ответы (2)


arrow_upward
1
arrow_downward

У меня точно такая же проблема. Я пробовал Wix 3.5 и 3.6.2012.0, и он не работал ни с одним из них. Это работает, если

  1. Я сначала использую regsvcs
  2. Удалить компонент
  3. Запустите msi и нажмите «Игнорировать», когда появится сообщение об уже существующем приложении.

Вам удалось найти решение?

person jagberg    schedule 12.08.2011

arrow_upward
0
arrow_downward

Во-первых, вы можете попробовать обновиться до последней версии WiX v3.5. В конце были исправлены некоторые ошибки в COM+. Если это не сработает, взгляните на открытые ошибки в COM+. Есть пара известных проблем с кодом установки из-за сложностей в COM+.

Если какие-либо из этих ошибок кажутся применимыми, возможно, вы можете помочь исправить их с сообществом?

person Rob Mensching    schedule 14.02.2011