The "ComPlusComp" Command |
The command must be used within a "ComPlusApp" block. It installs all components (COM classes) from a DLL file into the COM+ application. The attribute defaults can be updated using the "ComPlusProperty" command.
The command provides full registration of components in the COM+ class registration database (RegDB) as configured components, including interface, method, type library and proxy-stub information necessary for marshalling.
The command takes these parameters:
This parameter can reference any property specified in the "PROPERTIES" parameter of the "ComPlusApp" command. The "VbsCaCadReplace" routine is used for this and the default start marker is "(*" and end marker is "*)" (for example "(*INSTALLDIR*)").
This parameter can reference any property specified in the "PROPERTIES" parameter of the "ComPlusApp" command.
This parameter can reference any property specified in the "PROPERTIES" parameter of the "ComPlusApp" command.
EXAMPLE |
This example shows an application being created. MAKEMSI is choosing the ID (a guid) and it will use the same one for any subsequent build. Both Application and component properties are being set.
;--- Include MAKEMSI -------------------------------------------------------- #include "ME.MMH" ;--- Define installation directory (INSTALLDIR) ----------------------------- <$DirectoryTree Key="INSTALLDIR" Dir="[ProgramFilesFolder]\SomeDirectory" CHANGE="\" PrimaryFolder="Y"> ;--- I'm using any handy DLLs for this sample (I don't expect it to work...) --- #define FILE_SRC_DIR C:\Program Files\makemsi #define SAMPLE_COM+DLL_#1 MakeMSI.DLL #define SAMPLE_COM+DLL_#2 Reg4mm.dll ;--- Add the files (MSI components auto-generated) -------------------------- <$File RowKey="<$SAMPLE_COM+DLL_#1>" SOURCE="<$FILE_SRC_DIR>\<$SAMPLE_COM+DLL_#1>" Destination="[INSTALLDIR]\<$SAMPLE_COM+DLL_#1>"> <$File RowKey="<$SAMPLE_COM+DLL_#2>" SOURCE="<$FILE_SRC_DIR>\<$SAMPLE_COM+DLL_#2>" Destination="[INSTALLDIR]\<$SAMPLE_COM+DLL_#2>"> ;--- Create properties for USERID/PASSWORD (could create dialog to ask user) --- <$Property "USERID" Value="Fred"> ;;Can override on command line if wanted <$Property "PASSWORD" Value="abc"> ;;Can override on command line if wanted ;--- Define the COM+ Application -------------------------------------------- #data 'CaData' 2 ;--- Pass installation directory and install time DLL names ------------- "INSTALLDIR" "[INSTALLDIR]" ;;Location of installation directory "COMPLUS_DLL_1" "[#<$SAMPLE_COM+DLL_#1>]" ;;Want full install time location of specified file "RowKey" "COMPLUS_DLL_2" "[#<$SAMPLE_COM+DLL_#2>]" ;--- Pass UserId and Password ------------------------------------------- "USERID" "[USERID]" "PASSWORD" "[PASSWORD]" #data #( <$ComPlusApp "DennisBareisTest" DELETE="Y" Data="CaData" User=^VbsCaCadGet("USERID")^ PassWord=^VbsCaCadGet("PASSWORD")^ ; User=^"Dennis"^ PassWord=^"abc"^ ; ID="{47819B72-386A-4400-830C-1D0172EBF456}" > #) ;--- Set some Application attributes ------------------------------------- <$ComPlusProperty "Description" VALUE=^"Test Application created by TestMsi.MM"^> <$ComPlusProperty "AccessChecksLevel" VALUE="COMAdminAccessChecksApplicationComponentLevel"> <$ComPlusProperty "ApplicationAccessChecksEnabled" VALUE="True"> ;--- Create some application ROLES --------------------------------------- <$ComPlusRole "DennisBareisTestUsers" Description="Users for the DennisBareisTest test application" USERS="Everyone;Dennis"> ;--- Add components (note that a single DLL can have more than 1 component!) ------------------------- <$ComPlusComp DLL=^(*COMPLUS_DLL_1*)^> ;;Filenames passed in Custom Action data (correct no matter where user installed them) <$ComPlusComp DLL=^(*COMPLUS_DLL_2*)^> ;--- Update the component(s) --------------------------------------------- <$ComPlusCompUpdate> ;;Update all components (PROGID not supplied) ;--- Assign ROLES to the COMPONENT ----------------------------------- <$ComPlusRole "DennisBareisTestUsers"> <$ComPlusProperty "ComponentAccessChecksEnabled" VALUE="True"> <$/ComPlusCompUpdate> ;--- Try some exporting -------------------------------------------------- <$ComPlusExport MSI="out\ExportedCom-App.msi" PROXY="N"> <$ComPlusExport MSI="out\ExportedCom-Proxy.msi" PROXY="Y"> <$/ComPlusApp>