Use the built in registry elements, they are far more robust than RegAsm.  As 
long as the component rules are followed, you can have two applications 
installing this same COM object and the registry keys will be properly 
reference counted.  In your existing install, if you installed two instances 
and then uninstalled one of them (you do have an uninstall CA, right?) it would 
break COM because RegAsm does not do any ref-counting.

If this COM component is only for a single application, I would highly 
recommend using registration free COM and avoid the registry keys altogether.

-----Original Message-----
From: Neil Sleightholm [mailto:[email protected]] 
Sent: Thursday, April 10, 2014 3:29 PM
To: General discussion about the WiX toolset.
Subject: Re: [WiX-users] Register a .NET DLL in a COM+ Application - Could not 
install type library...

I believe RegAsm registers for COM not COM+ I believe. Also, I wouldn't 
recommend registering COM that way, it is better to use the built-in COM 
elements (Class, ProgId etc.) or write the registry keys directly.

-----Original Message-----
From: Marek Mielcarek [mailto:[email protected]]
Sent: 10 April 2014 20:34
To: General discussion about the WiX toolset.
Subject: Re: [WiX-users] Register a .NET DLL in a COM+ Application - Could not 
install type library...

Yes, you need to define custom action "Execute". Here is what works for me:

(1)define custom action that executes RegAsm.exe; example:
<CustomAction Id="ca_RegAsm_myDotNETassembly" Return="check" Execute="deferred" 
Directory="TARGETDIR" 
ExeCommand="&quot;[WindowsFolder]Microsoft.NET\Framework\v4.0.30319\RegAsm.exe&quot;
 &quot;[MY_APP_FOLDER]myDotNETassembly.dll&quot; /codebase" />

(2)schedule the action (1) in your <InstallExecuteSequence>, something like 
this:
      <Custom Action=" ca_RegAsm_myDotNETassembly" Before="InstallFinalize">
        <![CDATA[(&FeatureName = 3)]]>
      </Custom>

Few notes:
(a)the example uses RegAsm from framework v4 but you can modify to whatever you 
need (b)if you are registering your assembly in GAC you should remove /codebase 
from calling RegAsm (c)the example includes condition <![CDATA[(&FeatureName = 
3)]]> which causes the action to be executed only when FeatureName is being 
installed. You can remove that if you do not need it.

Thanks - hopefully it helps


-----Original Message-----
From: Davide [mailto:[email protected]]
Sent: Thursday, April 10, 2014 7:58 AM
To: [email protected]
Subject: Re: [WiX-users] Register a .NET DLL in a COM+ Application - Could not 
install type library...

Sorry for this repost... but does anyone have a solution for this?
I'm close to write my own CA...

Cheers,

Davide


2014-04-04 8:22 GMT+02:00 Davide <[email protected]>:

> Hi all,
>
> I spent a whole day with this problem now and would appreciate any help!
>
> To make it really easy I picked a sample COM+ Application from the 
> MSDN ( 
> http://code.msdn.microsoft.com/windowsdesktop/Creating-a-COM-Component
> -7ffbab9b) and tried to register it in a COM+ application through WIX
> - without success :(
>
> Here is my code:
>
>     <ComponentGroup Id="BinFileGroup">
>       <Component Id="MydotNet_dll" DiskId="1"
> Guid="082B553D-C3D1-4D10-BA4F-8048C84C9C99" Directory="DIR_Bin">
>         <Class Id="1F2642C4-BDE1-3B50-9DDE-F95747078F71"
> Context="InprocServer32" Description="COMPlusServicesExample.Customers"
> ThreadingModel="both" ForeignServer="mscoree.dll">
>           <ProgId Id="COMPlusServicesExample.Customers"
> Description="COMPlusServicesExample.Customers" />
>         </Class>
>         <Class Id="94464148-E1E2-3F84-BEE9-7C72F0D0E01D"
> Context="InprocServer32" Description="COMPlusServicesExample.CustomersDB"
> ThreadingModel="both" ForeignServer="mscoree.dll">
>           <ProgId Id="COMPlusServicesExample.CustomersDB"
> Description="COMPlusServicesExample.CustomersDB" />
>         </Class>
>         <File Id="COMPlusDotNet" Name="COMPlusDotNet.dll"
> Source="$(var.BinDir)\COMPlusDotNet.dll" KeyPath="yes" Assembly="no" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{1F2642C4-BDE1-3B50-9DDE-F95747078F71}\Implemented
> Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{1F2642C4-BDE1-3B50-9DDE-F95747078F71}\InprocServer32\1.0.5206.28472"
> Name="Class" Value="COMPlusServicesExample.Customers" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{1F2642C4-BDE1-3B50-9DDE-F95747078F71}\InprocServer32\1.0.5206.28472"
> Name="Assembly" Value="COMPlusDotNet, Version=1.0.5206.28472, 
> Culture=neutral, PublicKeyToken=2cda2eca579c96b4" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{1F2642C4-BDE1-3B50-9DDE-F95747078F71}\InprocServer32\1.0.5206.28472"
> Name="RuntimeVersion" Value="v2.0.50727" Type="string" Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{1F2642C4-BDE1-3B50-9DDE-F95747078F71}\InprocServer32\1.0.5206.28472"
> Name="CodeBase" Value="file:///[#COMPlusDotNet]" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{1F2642C4-BDE1-3B50-9DDE-F95747078F71}\InprocServer32"
> Name="Class" Value="COMPlusServicesExample.Customers" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{1F2642C4-BDE1-3B50-9DDE-F95747078F71}\InprocServer32"
> Name="Assembly" Value="COMPlusDotNet, Version=1.0.5206.28472, 
> Culture=neutral, PublicKeyToken=2cda2eca579c96b4" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{1F2642C4-BDE1-3B50-9DDE-F95747078F71}\InprocServer32"
> Name="RuntimeVersion" Value="v2.0.50727" Type="string" Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{1F2642C4-BDE1-3B50-9DDE-F95747078F71}\InprocServer32"
> Name="CodeBase" Value="file:///[#COMPlusDotNet]" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{94464148-E1E2-3F84-BEE9-7C72F0D0E01D}\Implemented
> Categories\{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}" Value="" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{94464148-E1E2-3F84-BEE9-7C72F0D0E01D}\InprocServer32\1.0.5206.28472"
> Name="Class" Value="COMPlusServicesExample.CustomersDB" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{94464148-E1E2-3F84-BEE9-7C72F0D0E01D}\InprocServer32\1.0.5206.28472"
> Name="Assembly" Value="COMPlusDotNet, Version=1.0.5206.28472, 
> Culture=neutral, PublicKeyToken=2cda2eca579c96b4" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{94464148-E1E2-3F84-BEE9-7C72F0D0E01D}\InprocServer32\1.0.5206.28472"
> Name="RuntimeVersion" Value="v2.0.50727" Type="string" Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{94464148-E1E2-3F84-BEE9-7C72F0D0E01D}\InprocServer32\1.0.5206.28472"
> Name="CodeBase" Value="file:///[#COMPlusDotNet]" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{94464148-E1E2-3F84-BEE9-7C72F0D0E01D}\InprocServer32"
> Name="Class" Value="COMPlusServicesExample.CustomersDB" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{94464148-E1E2-3F84-BEE9-7C72F0D0E01D}\InprocServer32"
> Name="Assembly" Value="COMPlusDotNet, Version=1.0.5206.28472, 
> Culture=neutral, PublicKeyToken=2cda2eca579c96b4" Type="string"
> Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{94464148-E1E2-3F84-BEE9-7C72F0D0E01D}\InprocServer32"
> Name="RuntimeVersion" Value="v2.0.50727" Type="string" Action="write" />
>         <RegistryValue Root="HKCR"
> Key="CLSID\{94464148-E1E2-3F84-BEE9-7C72F0D0E01D}\InprocServer32"
> Name="CodeBase" Value="file:///[#COMPlusDotNet]" Type="string"
> Action="write" />
>         <complus:ComPlusApplication  Id="MydotNet" Name="COM Plus 
> Services Example">
>           <complus:ComPlusAssembly Id="COMPlusDotNet"
> TlbPath="[#COMPlusDotNetTlb]" Type=".net" DllPath="[#COMPlusDotNet]">
>             <complus:ComPlusComponent Id="CheckInterface"
> CLSID="1F2642C4-BDE1-3B50-9DDE-F95747078F71"/>
>             <complus:ComPlusComponent Id="CheckInterface2"
> CLSID="94464148-E1E2-3F84-BEE9-7C72F0D0E01D"/>
>           </complus:ComPlusAssembly>
>         </complus:ComPlusApplication>
>       </Component>
>       <Component Id="MydotNet_tlb" DiskId="1"
> Guid="82E37437-9A85-4D93-985A-930AE8B5562B" Directory="DIR_Bin">
>         <File Id="COMPlusDotNetTlb" Name="COMPlusDotNet.tlb"
> Source="$(var.BinDir)\COMPlusDotNet.tlb" KeyPath="yes" >
>           <TypeLib Id="{382C73BF-1243-3749-ABFC-EE2FF15CC160}"
> Description="This is an example for creating COM+ Serviced 
> applications in .NET" HelpDirectory="DIR_Bin" Language="0" MajorVersion="1"
> MinorVersion="0">
>             <Interface Id="{4F36FC57-4D0A-38BF-9A0D-ECDD5C8E29A4}"
> Name="_Customers" ProxyStubClassId="{00020424-0000-0000-C000-000000000046}"
> ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
>             <Interface Id="{68D25731-3207-39B0-AE21-CE6AD66A2F8A}"
> Name="_CustomersDB"
> ProxyStubClassId="{00020424-0000-0000-C000-000000000046}"
> ProxyStubClassId32="{00020424-0000-0000-C000-000000000046}" />
>           </TypeLib>
>         </File>
>       </Component>
>     </ComponentGroup>
>
> The error message I get:
>
> ComPlusInstallExecute:  ExceptionInfo: Code='0', 
> Source='System.EnterpriseServices', Description='Could not install 
> type library 'C:\ApplDir\COMPlusDotNet.tlb' into application COM Plus 
> Services Example', 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: COMPlusDotNet
> ComPlusInstallExecute:  Error 0x80020009: Failed to register 
> assemblies
>
> When I comment out this part:
>
>           <complus:ComPlusAssembly Id="COMPlusDotNet"
> TlbPath="[#COMPlusDotNetTlb]" Type=".net" DllPath="[#COMPlusDotNet]">
>             <complus:ComPlusComponent Id="CheckInterface"
> CLSID="1F2642C4-BDE1-3B50-9DDE-F95747078F71"/>
>             <complus:ComPlusComponent Id="CheckInterface2"
> CLSID="94464148-E1E2-3F84-BEE9-7C72F0D0E01D"/>
>           </complus:ComPlusAssembly>
>
> An empty ComPlusApplication is created successfully. When I then 
> manually install the tlb (or the dll) via MMC snap-in into this COM+ 
> application it works fine.
>
> I also tried the DllPathFromGAC attribute and register the DLL in GAC, 
> but it also failed with an error message, that the assembly name could 
> not be found in the GAC.
>
> Thank you in advance!
>
> Best regards,
>
> Davide
>
------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration Continuously Automate 
Build, Test & Deployment Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration Continuously Automate 
Build, Test & Deployment Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration Continuously Automate 
Build, Test & Deployment Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
WiX-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to