Comment [WixUtilExtension]:
Wix Toolset Library and Extension DLL reference to a Wix Project. The Wix 
Toolset automatically adds necessary parameters to the Compiler (candle.exe) 
and Linker (light.exe) command lines, so as to correctly resolve when building 
the project. 
Linkage of appropriate extension DLL’s, causes the Linker to automatically pull 
all relevant Custom Actions, Error Messages and binary table rows into the MSI
 
<!--__________________________________________________________________ -->
<!--              Add wixca.dll into the Binary table                  -->
<!--__________________________________________________________________ -->
<!--Note: Create a database package using SQL Packager for the sample  
           product "db2mobileSQLPackage" called db2mobileSQLPackage.exe  
           Running this silently, this can accomplished by referencing
           the wixca library that comes with Wix, which provides a function 
           called CAQuietExec.                
<!--__________________________________________________________________ -->
<!--Note: Wixca allows us to run CAQuietExec (no annoying DOS box) 
           $(env.WIXROOT) is available when we SET WIXROOT=<path> in DOS. 
           This helps to make the project portable because we can set the WIX 
           program directory in the build .bat file and then put these 
           project files wherever we want.              
<!--___________________________________________________________________ -->
 
    <BinaryId="wixca"SourceFile="c:\Program Files\Windows Installer XML 
                                      v3\bin\WixUtilExtension.dll" />
 
Comment [SourceFile Attribute]:
Specifies where to find the file for packaging during the build—Full Path 
reference to the binary file. Instead of hard-coding these values as above we 
could alternativerly use Wix pre-processor variables that are passed to the WiX 
compiler.
 
    <!--<Binary Id="wixca" SourceFile="wixca.dll"                 />-->
    <!--<Binary Id="wixca" SourceFile="$(env.WIXROOT)\wixca.dll" />-->
 
[CAQuietExec-1] Could someone provide example code to use the QtExec custom 
action? First of all, where is the "wixca.dll" located in WiX 3.0? It's not in 
C:\Program Files\WiX Installer XML v3\bin where it was in WiX 2.0.
[CAQuietExec-2] In 3.0 they have moved the ca to the WixUtilExtension.dll so 
you need to add a reference to it to be able to use WiXCA. I am assuming you 
are using the VS 2005 plugin, so just right click the reference folder in you 
WiX project and add a reference to the WixUtilExtension.dll in the WiX bin 
folder. This should compile and work (it does for me).
 
 
 
 
 
<!--____________________________________________________________________ -->
<!--Note: Deferred custom actions can't access properties, so they have to 
           be set using a custom action. A common use of this pattern for 
           QtExec custom actions is to run an executable that will be 
           installed as a part of the Windows Installation setup 
application                                                   
<!--_____________________________________________________________________ -->
<!--Note: WixQueryOsInfo, WixQueryOsDirs, and WixQueryOsDriverInfo custom 
           actions in wixca (part of WixUtilExtension)set properties over and 
           above the MSI set for OS product/suite detection and standard 
           directories. The WixQueryOsWellKnownSID custom action sets 
           properties for the localized names of some built in Windows users 
           and groups. 
<!--_______________________________________________________________________->
 
<CustomActionId="Database.Install.Properties"Property="Database.Install"
      Value="&quot;[INSTALLDIR]db2mobileSQLPackage.exe&quot; 
                              /server:[SERVERNAME]/database:[DATABASENAME] / 
                               quiet/makedatabase"/>
 
<CustomActionId="Database.Install.Properties.Sql"Property="Database.Install"
      Value="&quot;[INSTALLDIR]db2mobileSQLPackage.exe&quot;/server:[SERVERNAME]
                                  /database:[DATABASENAME]/username:[DBUSERNAME]
                                 /password:[PASSWORD]/quiet/makedatabase"/>
<!--______________________________________________________________________ -->
<!--Note: QtExec custom action allows you to run an arbitrary command line 
           in an MSI-based setup in silent mode. QtExec is commonly used to 
           suppress console windows that would otherwise appear appear when
           invoking the executable directly. The custom action is located in 
           the WixCA library, which is a part of the 
WixUtilExtension                                                                                        
     <!--_____________________________________________________________________ 
-->
 
<CustomActionId="Database.Install"Impersonate="yes"BinaryKey="wixca"
                         
DllEntry="CAQuietExec"Execute="deferred"Return="check"/>
    
<!--_____________________________________________________________________ -->
<!--Our custom tasks run in the InstallExecuteSequence, the following 
     install and uninstall conditions included (componentname=2 means to run 
     only on uninstall) vs (componentname&gt;2 means to run only on 
install)           
<!--_____________________________________________________________________ -->
 
<InstallExecuteSequence>
<CustomAction="Database.Install.Properties"   
      After="InstallFiles">$db2mobileSQLPackager.Packages&gt;2
</Custom>
 
<CustomAction="Database.Install.Properties.Sql"
      After="Database.Install.Properties">$db2mobileSQLPackager.Package
      s&gt;2 AND USEINTEGRATEDSECURITY=0
</Custom>
 
<CustomAction="Database.Install"
      After="Database.Install.Properties.Sql">$db2mobileSQLPackager.Pac
            kages&gt;2 AND USEINTEGRATEDSECURITY=1
      </Custom>
</InstallExecuteSequence>
    
 
 
[CAQuietExec-3] There is a documentation mistake in WiX3 chm, you need to 
replace the Id="wixca" with Id="WixCA and remove the Binary element. 
Then you will need to add WixUtilExtension to light using -ext switch.
 
[CAQuietExec-4] I need to be able to use Wix Quiet Execution Custom Action 
(CAQuietExec), which is in WixCA library which is a part of the 
WixUtilExtension. I thought i could do this by creating a "Call Dll" Custom 
Action and add " -ext WixUtilExtension" to candle and light compile options. 

Unfortunately, MSIFactory seems to insert additional reference to WixCA 
(line <Binary Id="WixCA" SourceFile="WixCA"/>) into setup and that results in 
error during linking 
("error LGHT0091: Duplicate symbol 'Binary: WixCA’ found"), because that symbol 
already defined in WixUtilExtension library.

Now, if i remove WixUtilExtension from the compiler options, i'm starting to 
get a different error 
("error LGHT0103 : The system cannot find the file 'WixCA'.")So the question 
is, what would be a correct way to invoke CAQuietExec during setup?
 
Comment [Alternative Shell.Execute Custom Action]:
If you set the full path to the DLL instead of just informing "WixCA" in the 
Settings dialog of your Custom Action, you will see that the installer builds 
without error messages. There seems to be some problem in the way you set the 
Custom Action in your dummy project, as it does not get executed. When I 
changed the timing, the CA is executed, however it fails because the 
$(var.MSIFactoryFolder)\Wix\WixUtilExtension.dll is not part of the files that 
are deployed on the target system, so the requested DLL cannot be found. If the 
idea is just the silent execution of some command or program, I would suggest 
using the Luanch action Shell.Execute() instead, setting the WindowMode 
parameter to "-1".
<!--<Publish Dialog="ExitDialog" Control="Finish" Event="DoAction"  
Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT 
Installed</Publish>-->
<!--______________________________________________________________________________
 -->
    <!--Note: Include the custom 
action                                               -->
    
<!--______________________________________________________________________________
 -->
    <!--   The WixShellExec custom action in wixca (part of 
WixUtilExtension)          -->
    <!--       lets you open document or URL targets via the Windows shell. A 
common   -->
    <!--       use is to launch readme files or URLs using their registered 
default    -->
    <!--       applications based on their 
extension.                                  -->
    
<!--______________________________________________________________________________
 -->
    
    <!--<Property Id="WixShellExecTarget" Value="[#db2mobileSQLPackage.exe]" />
    <CustomAction Id="LaunchApplication" 
BinaryKey="WixCA" 
DllEntry="WixShellExec"
Impersonate="yes" />-->
    
    
<!--_________________________________________________________________________________
 -->
    <!--     Note: that WixShellExecute can only be used as an immediate custom 
action    -->
    
<!--_________________________________________________________________________________
 -->
    <!--    as it launches an application without waiting for it to close. 
WixShellExec   -->
    <!--     reads its target from the WixShellExecTarget property, formats it, 
and then  -->
    <!--    calls ShellExecute with the formatted value. It uses the default 
verb, which  -->
    <!--    is usually 
"open."                                                            -->
    
<!--_________________________________________________________________________________
 -->
   <!--<ProgressText Action="LaunchApplication">WixShellExecute EnterpriseSMS 
database                                      
&quot;[DATABASENAME]&quot;</ProgressText>-->


      
------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to