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)


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

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

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

person jagberg    schedule 12.08.2011

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

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

person Rob Mensching    schedule 14.02.2011