Windows Installer does not commit files to the GAC until InstallFinalize 
(the end of the transaction).  This prevents GAC assemblies from being 
used or even referenced really during the installation transaction.  I 
think this design limitation is the root of your issue.

Don Benson wrote:
> I am trying to generate a COM+ App that includes a .NET DLL that is installed 
> in the GAC. I am able to get the following project sample to successfully 
> install on Windows 2000 with .NET 2.0. This sample does not put the COM+ DLL 
> in the GAC, but it does put a dependency (CSLA) in the GAC.
>
> <?xml version="1.0" encoding="UTF-8"?>
> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi";
>      xmlns:util="http://schemas.microsoft.com/wix/UtilExtension";
>      xmlns:complus="http://schemas.microsoft.com/wix/ComPlusExtension";>
>         <Product Id="c2b16a12-ac2d-4974-93ed-9f489a3f0603" 
> Name="TestInstaller" Language="1033" Version="1.0.0.0" 
> Manufacturer="TestInstaller" 
> UpgradeCode="abdf00e1-a390-4f83-b3d3-f4d56b8d2d2d">
>                 <Package InstallerVersion="200" Compressed="no" />
>
>                 <Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
>
>     <Directory Id="TARGETDIR" Name="SourceDir">
>       <Directory Id="ProgramFilesFolder">
>         <Directory Id="INSTALLDIR" Name="MyProduct" 
> FileSource="$(var.FileRoot)\ServerSource">
>           <Directory Id="MiddleTier" Name="MiddleTier">
>             <Component Id="Csla.dll" 
> Guid="{5E9AAC87-7163-40CE-82C2-A9D27E80CD8D}">
>               <Class Id="{70EDECB2-0850-3623-A676-B78A19A5F9FD}" 
> Context="InprocServer32" Description="Csla.Server.ServicedDataPortal" 
> ThreadingModel="both" ForeignServer="mscoree.dll">
>                 <ProgId Id="Csla.Server.ServicedDataPortal" 
> Description="Csla.Server.ServicedDataPortal"/>
>               </Class>
>               <File Id="Csla.dll" Name="Csla.dll" KeyPath="yes" 
> Assembly=".net" Source="$(var.FileRoot)\ClientAssemblies\Csla.dll"/>
>             </Component>
>             <Component Id="MyProduct.EnterpriseServicesHost.dll" 
> Guid="{74CA7262-9003-43FB-BCCD-EAD0E7A88DCF}">
>               <Class Id="{E8E5308E-6B44-3DBC-8F04-8F35CE437F0B}" 
> Context="InprocServer32" 
> Description="MyProduct.EnterpriseServicesHost.EnterpriseServicesPortal" 
> ThreadingModel="both" ForeignServer="mscoree.dll">
>                 <ProgId 
> Id="MyProduct.EnterpriseServicesHost.EnterpriseServicesPortal" 
> Description="MyProduct.EnterpriseServicesHost.EnterpriseServicesPortal" />
>               </Class>
>               <File Id="MyProduct.EnterpriseServicesHost.dll"
>                     Name="MyProduct.EnterpriseServicesHost.dll" KeyPath="yes"
>                     Assembly="no"
>                     
> Source="$(var.FileRoot)\ClientAssemblies\MyProduct.EnterpriseServicesHost.dll"/>
>               <complus:ComPlusApplication Id="MyProduct" 
> ApplicationId="{3323762F-6B27-11D5-BC30-009027CC66CD}" Name="MyProduct"
>                 AccessChecksLevel="applicationLevel" 
> ApplicationAccessChecksEnabled="no" Authentication="none"
>                 Identity="[MYUSERNAME]" Password="[MYPASSWORD]">
>                 <complus:ComPlusAssembly Id="MyProduct.EnterpriseServicesHost"
>                                          
> DllPath="[#MyProduct.EnterpriseServicesHost.dll]"
>                                          
> TlbPath="[#MyProduct.EnterpriseServicesHost.tlb]"
>                                          Type=".net" RegisterInCommit="yes">
>                   <complus:ComPlusComponent Id="EnterpriseServicesPortal"  
> CLSID="E8E5308E-6B44-3DBC-8F04-8F35CE437F0B" 
> Description="MyProduct.EnterpriseServicesHost.EnterpriseServicesPortal"/>
>                 </complus:ComPlusAssembly>
>               </complus:ComPlusApplication>
>             </Component>
>             <Component Id="MyProduct.EnterpriseServicesHost.tlb" 
> Guid="17F7F642-0D4C-46EC-BD4C-EB69B888BE83">
>               <File Id="MyProduct.EnterpriseServicesHost.tlb" 
> Source="$(var.FileRoot)\ClientAssemblies\MyProduct.EnterpriseServicesHost.tlb"
>  KeyPath="yes"/>
>             </Component>
>           </Directory>
>         </Directory>
>       </Directory>
>                 </Directory>
>
>                 <Feature Id="ProductFeature" Title="TestInstaller" Level="1">
>       <ComponentRef Id="MyProduct.EnterpriseServicesHost.dll"/>
>       <ComponentRef Id="MyProduct.EnterpriseServicesHost.tlb"/>
>       <ComponentRef Id="Csla.dll"/>
>                 </Feature>
>         </Product>
> </Wix>
>
> To use the GAC, I make three changes:
> o Set File/@Assembly to ".net" instead of "no" on the "Host" DLL o Remove the 
> DLLPath attribute from the ComPlusAssembly element.
> o Add DLLPathFromGAC = "yes" to the ComPlusAssembly element.
>
> When I run this install, it fails with the following info in the log:
> MSI (s) (F4:3C) [23:03:24:458]: Invoking remote custom action. DLL: 
> C:\WINNT\Installer\MSI44.tmp, Entrypoint: ComPlusInstallExecuteCommit
> ComPlusInstallExecuteCommit:  Registering assembly, key: 
> MyProduct.EnterpriseServicesHost
> ComPlusInstallExecuteCommit:  Error 0x80070490: Failed to get path for 
> assembly from GAC
> ComPlusInstallExecuteCommit:  Error 0x80070490: Failed to register assembly, 
> key: MyProduct.EnterpriseServicesHost
> ComPlusInstallExecuteCommit:  Error 0x80070490: Failed to register assemblies
>
> When I used ProcMon to monitor the activity, I saw that the DLL was being put 
> in the GAC. Specifically, it was going into the GAC_MSIL folder. Then, at the 
> time registration would be happening, I saw a file request for the DLL from 
> the GAC folder, which was not found.
>
> I'm not sure exactly what is going on here. I need to put the DLLs in the GAC 
> because Windows 2000 COM+ applications don't have an application root folder. 
> Without the GAC, I'd have to put the .NET DLLs in the System32 folder.
>
> Is this a misconfigured project, a bug in the Wix extension, a problem in 
> .NET, or what? Do I have any workaround options?
>
> Oh, I almost forgot... this is built with WIX v3.0.5006 (built 06-Feb-09).
>
> - Don Benson -
>
> CONFIDENTIALITY NOTICE: This email and any files transmitted with it are the 
> property of Tribute Inc. and/or its affiliates. The contents of this 
> communication are confidential and may contain information that is privileged 
> and/or exempt from disclosure under applicable law. It is intended solely for 
> use of the individual or entity to whom this email is addressed. If you are 
> not one of the named recipient(s) or otherwise have reason to believe that 
> you have received this message in error, please notify the sender and 
> immediately delete this message and any attachments. Any unauthorized use, 
> retention, dissemination, forwarding, printing, or copying of this email is 
> strictly prohibited.
>
> ------------------------------------------------------------------------------
> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
> -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
> -Strategies to boost innovation and cut costs with open source participation
> -Receive a $600 discount off the registration fee with the source code: SFAD
> http://p.sf.net/sfu/XcvMzF8H
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>   

------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to