[wix-devs] WixComPlusExtension Status update 1

Rob Mensching rob at firegiant.com
Thu Aug 15 07:27:23 PDT 2019


Thank you for sending along this information. I understand better what is going on here and it makes sense. The new element name is:

	ComPlusImportedComponent

It sounds a little funny (I think it is the past test "Imported") but I don't have a better name. I wanted to highlight it here in case anyone (<cough>Bob</cough>) had a better name.

However, don't let the name hold you back. That should be a (relatively) simple thing to change compared to the install, repair, uninstall, and rollback for all logic for the import.


Regards,

  Rob Mensching
  CEO
  FireGiant
_______________________________________________________________
 FireGiant  |  Dedicated support for the WiX toolset  |  http://www.firegiant.com/

-----Original Message-----
From: Allen, Eric M. (Tax&Accounting Prof) <eric.allen at thomsonreuters.com> 
Sent: Wednesday, August 7, 2019 3:01 PM
To: Rob Mensching <rob at firegiant.com>; WiX Toolset Developer Mailing List <wix-devs at lists.wixtoolset.org>
Subject: RE: WixComPlusExtension Status update 1

That's an excellent question. Here's the wxs file from the reduced test case I was using for debugging purposes.

<?xml version="1.0" encoding="utf-8"?>
<Wix
  xmlns="http://schemas.microsoft.com/wix/2006/wi"
  xmlns:comPlus="http://schemas.microsoft.com/wix/ComPlusExtension"
  xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
  >
  <!--
    Usage:
    (0) Set path to resolve candle.exe and light.exe
    (1) Change to the folder containing this file
    (2) invoke:
      candle -ext WixComPlusExtension -ext WixUtilExtension .\SimpleComCalculator.wxs
    (3) invoke:
      light -ext WixComPlusExtension -ext WixUtilExtension .\SimpleComCalculator.wixobj
  -->
  <Product
    Name="SimpleComPlusCalculator"
    Manufacturer="Acme"
    Id="C23E8496-B9C6-4657-AA47-F24FCCB0C42D"
    UpgradeCode="3EE1846E-60DB-4399-A4A5-CD4ADABCF5B9"
    Language="1033"
    Codepage="1252"
    Version="1.0.0"
    >

    <Package
      Id="*"
      Keywords="Installer"
      Description="COM+ Calculator"
      Comments="Experimental"
      Manufacturer="Acme"
      InstallerVersion="500"
      Languages="1033"
      Compressed="yes"
      SummaryCodepage="1252"
    />

    <Media
      Id="1"
      Cabinet="SimpleComPlusCalculator.cab"
      EmbedCab="yes"
      DiskPrompt="What Disk?"
    />
    <Property
      Id="DiskPrompt"
      Value="Demo Install [1]"
    />

    <Directory
      Id="TARGETDIR"
      Name="SourceDir"
    >

      <Directory Id="ProgramFilesFolder" Name="PFiles" >
        <Directory Id="Acme" Name="Acme" >
          <Directory Id="INSTALLDIR" Name="Calculator Experiment" >

            <Component Guid="*" Id="ClientExecutable" >
              <File
                Id="ClientExe"
                Name="SimpleComConsumer.exe"
                Source="SimpleComConsumer\bin\Release\SimpleComConsumer.exe"
                KeyPath="yes"
              />
            </Component>

            <Component Guid="*" Id="NativeDll" >
              <File
                Id="ndf"
                Name="SimpleComServer.dll"
                Source="Release\SimpleComServer.dll"
                KeyPath="yes"
              >
                <!--
                  Experimentation revealed that when using ComPlus to
                  install with the TypeLib, an error:
                  HRESULT COMADMIN_E_ALREADYINSTALLED
                  is emitted from the call to
                  ICOMAdminCatalog::InstallComponent()
                -->
                <!--
                <Class Id="D0213ABD-5928-481E-AF3E-51B860AF47D2" >
                  <!-&-; No ProgId &-;->
                  <Interface
                    Id="4A71510A-DB14-49C1-98FF-26F5B8C26DE6"
                    Name="IDispCalculatorComponent"
                    ProxyStubClassId32="00020420-0000-0000-C000-000000000046"
                  />
                </Class>
                -->
              </File>

              <comPlus:ComPlusApplication
                Id="CalculatorComPlus"
                Name="Com Plus Calculator"
              >
                <comPlus:ComPlusApplicationRole
                  Id="CreaterOwnerRole"
                  Name="CreatorOwner"
                >
                  <comPlus:ComPlusGroupInApplicationRole
                    Id="AuthUsersValid"
                    Group="AuthUsersGroup"
                  />
                </comPlus:ComPlusApplicationRole>
                <comPlus:ComPlusAssembly
                  Id="CalculatorAssembly"
                  DllPath="[#ndf]"
                  TlbPath="[#tlb]"
                  Type="native"
                >
                  <comPlus:ComPlusComponent
                    Id="CalculatorComPlusComponent"
                    CLSID="D0213ABD-5928-481E-AF3E-51B860AF47D2"
                  />
                </comPlus:ComPlusAssembly>
              </comPlus:ComPlusApplication>
            </Component>

            <Component Guid="*" Id="NativeTypeLib">
              <File
                Id="tlb"
                Name="SimpleComServer.tlb"
                Source="Release\SimpleComServer.tlb"
                KeyPath="yes"
              />
            </Component>
          </Directory>
        </Directory>
      </Directory>
    </Directory>

    <Feature Id="Complete" Level="1" >
      <ComponentRef Id="ClientExecutable" />
      <ComponentRef Id="NativeDll" />
      <ComponentRef Id="NativeTypeLib" />
    </Feature>

    <!--
    Using the domain per the 2009-02-11 answer to
    https://www.trycatchfail.com/2008/07/28/wix-permissionex-problem-solved/
    -->
    <util:Group
      Id="AuthUsersGroup"
      Name="Authenticated Users"
      Domain="NT AUTHORITY"
    />
  </Product>
</Wix>

Under my proposed changes, one would basically uncomment the registration children of the <File> element with Id="ndf", remove the Component with Id="NativeTypeLib" [recall my actual component of concern doesn't have a valid typelib] and replace <comPlus:ComPlusAssembly> with something similar to the
following:

<comPlus:ComPlusImportedComponent
  Id="CalculatorComPlusComponent"
  CLSID="D0213ABD-5928-481E-AF3E-51B860AF47D2"
/>

Then, at runtime, instead of calling InstallComponent(path_to_dll, path_to_typelib), the extension will call
ImportComponent("D0213ABD-5928-481E-AF3E-51B860AF47D2") [but with a GUID instead of a string].

-----Original Message-----
From: Rob Mensching <rob at firegiant.com>
Sent: Tuesday, August 06, 2019 3:58 PM
To: WiX Toolset Developer Mailing List <wix-devs at lists.wixtoolset.org>
Cc: Allen, Eric M. (Tax&Accounting Prof) <eric.allen at thomsonreuters.com>
Subject: RE: WixComPlusExtension Status update 1

Eric,

Thanks for the detail. It would help me a lot if you could use concrete examples. For example, first provide an example of .wxs code for that would "normally" be used to install a COM+ today. Then show a second example of the new .wxs code, and to concretely show what must be added/changed to support the scenario.

Examples help me visualize what is going on. It will be especially helpful here since I've never worked with COM+ and your real world examples should help ground the conversation.

Thanks,

  Rob Mensching
  CEO
  FireGiant
_______________________________________________________________
 FireGiant  |  Dedicated support for the WiX toolset  |  https://urldefense.proofpoint.com/v2/url?u=http-3A__www.firegiant.com_&d=DwIFAg&c=4ZIZThykDLcoWk-GVjSLmy8-1Cr1I4FWIvbLFebwKgY&r=JdUi5kYgt_GN1Ohq3oEyMHgCmK_1J8HGeub4gkGmoCg&m=7Xr7s7nnDHQutBpXjR7MPqyr5zrJ__L8Tua4Ky4XiY0&s=5_-49RplC0qfyhdn_Nd9xhdOiec_O8wjOwq4togHqH8&e= 

-----Original Message-----
From: wix-devs <wix-devs-bounces at lists.wixtoolset.org> On Behalf Of Allen, Eric M. (Tax&Accounting Prof) via wix-devs
Sent: Friday, August 2, 2019 3:01 PM
To: Wix Devs Mailing List (wix-devs at lists.wixtoolset.org) <wix-devs at lists.wixtoolset.org>
Cc: Allen, Eric M. (Tax&Accounting Prof) <eric.allen at thomsonreuters.com>
Subject: [wix-devs] WixComPlusExtension Status update 1

Hello Wix-Devs.

This message serves the dual purpose of ensuring I can successfully mail the mailing list. This is with regard to https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_wixtoolset_issues_issues_6061&d=DwIFAg&c=4ZIZThykDLcoWk-GVjSLmy8-1Cr1I4FWIvbLFebwKgY&r=JdUi5kYgt_GN1Ohq3oEyMHgCmK_1J8HGeub4gkGmoCg&m=7Xr7s7nnDHQutBpXjR7MPqyr5zrJ__L8Tua4Ky4XiY0&s=mpNQFScnSk_ibThKm2Lgma925tHBwd85vSlVC3P6GWM&e= 

Now that I'm refamiliarizing myself with the issues, and closer to where I have my notes, I can recall that my basic plan was to allow a new child of ComPlusApplication in the wxs. As an alternate to ComPlusAssembly, we would have new element, strawman name ComPlusImportedComponent. Looking carefully, it *might* be possible to allow ComPlusComponent at this level instead of only as a child of Assembly, and based on the parent, determine whether we're imported or installed. That's probably something to look into after getting something working.
 
Regardless, the goal is to change the runtime behavior to call ImportComponent instead of InstallComponent.
https://urldefense.proofpoint.com/v2/url?u=https-3A__docs.microsoft.com_en-2Dus_windows_win32_api_comadmin_nf-2Dcomadmin-2Dicomadmincatalog-2Dimportcomponent&d=DwIFAg&c=4ZIZThykDLcoWk-GVjSLmy8-1Cr1I4FWIvbLFebwKgY&r=JdUi5kYgt_GN1Ohq3oEyMHgCmK_1J8HGeub4gkGmoCg&m=7Xr7s7nnDHQutBpXjR7MPqyr5zrJ__L8Tua4Ky4XiY0&s=iUdL9n9gL97nYFKC_mYS6lGalbPEo0MUOBdFpR4Ho58&e=
https://urldefense.proofpoint.com/v2/url?u=https-3A__docs.microsoft.com_en-2Dus_windows_win32_api_comadmin_nf-2Dcomadmin-2Dicomadmincatalog-2Dinstallcomponent&d=DwIFAg&c=4ZIZThykDLcoWk-GVjSLmy8-1Cr1I4FWIvbLFebwKgY&r=JdUi5kYgt_GN1Ohq3oEyMHgCmK_1J8HGeub4gkGmoCg&m=7Xr7s7nnDHQutBpXjR7MPqyr5zrJ__L8Tua4Ky4XiY0&s=jPLsJDfJlMw_ClfIAqHvuLox6H8p6KCbDqtmomKQo18&e= 

I think I need to engineer a three-part plan.
1) The compiler needs to know to take the new element and put it in a table.
2) cpsched needs to query the table and emit data into the property used to
   communicate to cpexec.
3) cpexec needs to parse the property and send it down into an alternative for
   CpiConfigureAssemblies() in each of ComPlusInstallExecute(),
   ComPlusInstallExecuteCommit(), and ComPlusUninstallExecute().

There may need to be some additional supporting work to achieve those and keep rollback where we want it.

One unrelated improvement I want to make is to the Documentation to indicate that the ComPlusGroupInApplicationRole is expecting to cooperate with UtilExtension's Group (likely similar for User). I'm not quite sure where to go in order to make documentation edits.

Thank you for your time and feedback.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Eric M. Allen Lead Software Developer

Thomson Reuters
the answer company

Phone: +1(734) 388-3878

eric.allen at tr.com

thomsonreuters.com

____________________________________________________________________
WiX Toolset Developer Mailing List provided by FireGiant https://urldefense.proofpoint.com/v2/url?u=http-3A__www.firegiant.com_&d=DwIFAg&c=4ZIZThykDLcoWk-GVjSLmy8-1Cr1I4FWIvbLFebwKgY&r=JdUi5kYgt_GN1Ohq3oEyMHgCmK_1J8HGeub4gkGmoCg&m=7Xr7s7nnDHQutBpXjR7MPqyr5zrJ__L8Tua4Ky4XiY0&s=5_-49RplC0qfyhdn_Nd9xhdOiec_O8wjOwq4togHqH8&e= 



More information about the wix-devs mailing list