Wix - ComPlusAssembly - не удалось установить библиотеку типов - PullRequest
3 голосов
/ 01 февраля 2010

Я новичок в 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 +. Я продолжаю получать сообщение об ошибке «Не удалось установить библиотеку типов». Я читаю всю документацию, которую могу найти, и уже несколько дней работаю в Google. Я нахожу довольно много сообщений на эту тему, но я все еще не могу решить проблему.

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

Приветствия
-Nils

Ответы [ 2 ]

1 голос
/ 13 августа 2011

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

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

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

0 голосов
/ 15 февраля 2011

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

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

...