[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