Hi guys,

I want to use the WixUI_Advanced sequence so that I can easily support per 
machine and per user installation in the same package in order to install a 
VSIX package. I have added some custom tasks to ensure that the default paths 
for the two scopes point to the correct places for VSIX via MSI installations. 
The issue I have is that WixUI_Advanced has a choose installation directory 
dialog for the per machine case. I need to skip this dialog because the paths 
for the two scopes are specific for VSIX and cannot be changed.

I have made a copy of WixUI_Advanced, renamed it and referenced it in my 
Project.wxs.

Project.wxs contains

    <UI>
      <UIRef Id="WixUI_ErrorProgressText" />
      <UIRef Id="UISequence" />
    </UI>

UISequence.wxs contains

<?xml version="1.0" encoding="UTF-8"?>
<!--
This is a copy of the WixUI_Advanced UI sequence.
The only change is to remove the option to select an install directory
-->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi";>
  <Fragment>
    <WixVariable Id="WixUISupportPerUser" Value="1" Overridable="yes" />
    <WixVariable Id="WixUISupportPerMachine" Value="1" Overridable="yes" />

    <PropertyRef Id="ApplicationFolderName" />

    <InstallExecuteSequence>
      <Custom Action="WixSetDefaultPerUserFolder" Before="CostFinalize" />
      <Custom Action="WixSetDefaultPerMachineFolder" 
After="WixSetDefaultPerUserFolder" />
      <Custom Action="WixSetPerUserFolder" 
After="WixSetDefaultPerMachineFolder">ACTION="INSTALL" AND APPLICATIONFOLDER="" 
AND (ALLUSERS="" OR (ALLUSERS=2 AND (NOT Privileged)))</Custom>
      <Custom Action="WixSetPerMachineFolder" 
After="WixSetPerUserFolder">ACTION="INSTALL" AND APPLICATIONFOLDER="" AND 
(ALLUSERS=1 OR (ALLUSERS=2 AND Privileged))</Custom>
    </InstallExecuteSequence>
    <InstallUISequence>
      <Custom Action="WixSetDefaultPerUserFolder" Before="CostFinalize" />
      <Custom Action="WixSetDefaultPerMachineFolder" 
After="WixSetDefaultPerUserFolder" />
      <Custom Action="WixSetPerUserFolder" 
After="WixSetDefaultPerMachineFolder">ACTION="INSTALL" AND APPLICATIONFOLDER="" 
AND (ALLUSERS="" OR (ALLUSERS=2 AND (NOT Privileged)))</Custom>
      <Custom Action="WixSetPerMachineFolder" 
After="WixSetPerUserFolder">ACTION="INSTALL" AND APPLICATIONFOLDER="" AND 
(ALLUSERS=1 OR (ALLUSERS=2 AND Privileged))</Custom>
    </InstallUISequence>

    <UI Id="UISequence">
      <TextStyle Id="WixUI_Font_Normal" 
FaceName="!(loc.Advanced_Font_FaceName)" 
Size="!(loc.Advanced_Font_Normal_Size)" />
      <TextStyle Id="WixUI_Font_Bigger" 
FaceName="!(loc.Advanced_Font_FaceName)" 
Size="!(loc.Advanced_Font_Bigger_Size)" />
      <TextStyle Id="WixUI_Font_Title" FaceName="!(loc.Advanced_Font_FaceName)" 
Size="!(loc.Advanced_Font_Title_Size)" Bold="yes" />
      <TextStyle Id="WixUI_Font_Emphasized" 
FaceName="!(loc.Advanced_Font_FaceName)" 
Size="!(loc.Advanced_Font_Emphasized_Size)" Bold="yes" />

      <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
      <Property Id="WixUI_Mode" Value="Advanced" />

      <DialogRef Id="BrowseDlg" />
      <DialogRef Id="DiskCostDlg" />
      <DialogRef Id="ErrorDlg" />
      <DialogRef Id="FatalError" />
      <DialogRef Id="FilesInUse" />
      <DialogRef Id="MsiRMFilesInUse" />
      <DialogRef Id="PrepareDlg" />
      <DialogRef Id="ProgressDlg" />
      <DialogRef Id="ResumeDlg" />
      <DialogRef Id="UserExit" />
      <DialogRef Id="WelcomeDlg"/>

      <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" 
Value="Return" Order="999">1</Publish>

      <Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" 
Value="WixUIValidatePath" Order="1">1</Publish>
      <Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" 
Value="InvalidDirDlg" 
Order="2"><![CDATA[WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>

      <Publish Dialog="AdvancedWelcomeEulaDlg" Control="Advanced" 
Event="NewDialog" Value="InstallScopeDlg" 
Order="1">!(wix.WixUISupportPerMachine) AND !(wix.WixUISupportPerUser)</Publish>
      <Publish Dialog="AdvancedWelcomeEulaDlg" Control="Advanced" 
Event="NewDialog" Value="FeaturesDlg" Order="2">NOT 
!(wix.WixUISupportPerMachine)</Publish>
      <Publish Dialog="AdvancedWelcomeEulaDlg" Control="Advanced" 
Event="NewDialog" Value=" InstallScopeDlg" 
Order="3">!(wix.WixUISupportPerMachine) AND NOT 
!(wix.WixUISupportPerUser)</Publish>

      <Publish Dialog="InstallScopeDlg" Control="Back" Event="NewDialog" 
Value="AdvancedWelcomeEulaDlg">1</Publish>
      <!-- override default WixAppFolder of WixPerMachineFolder as standard 
user won't be shown the radio group to set WixAppFolder -->
      <Publish Dialog="InstallScopeDlg" Control="Next" Property="WixAppFolder" 
Value="WixPerUserFolder" Order="1">!(wix.WixUISupportPerUser) AND NOT 
Privileged</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" Property="ALLUSERS" 
Value="{}" Order="2">WixAppFolder = "WixPerUserFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" Property="ALLUSERS" 
Value="1" Order="3">WixAppFolder = "WixPerMachineFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" 
Property="APPLICATIONFOLDER" Value="[WixPerUserFolder]" Order="4">WixAppFolder 
= "WixPerUserFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" 
Property="APPLICATIONFOLDER" Value="[WixPerMachineFolder]" 
Order="5">WixAppFolder = "WixPerMachineFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" Event="NewDialog" 
Value="FeaturesDlg" Order="6">WixAppFolder = "WixPerUserFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" Event="NewDialog" 
Value="FeaturesDlg" Order="7">WixAppFolder = "WixPerMachineFolder"</Publish>

      <Publish Dialog="FeaturesDlg" Control="Back" Event="NewDialog" 
Value="InstallScopeDlg">NOT Installed AND WixAppFolder = 
"WixPerUserFolder"</Publish>
      <Publish Dialog="FeaturesDlg" Control="Back" Event="NewDialog" 
Value="InstallScopeDlg">NOT Installed AND WixAppFolder = 
"WixPerMachineFolder"</Publish>
     <Publish Dialog="FeaturesDlg" Control="Back" Event="NewDialog" 
Value="MaintenanceTypeDlg">Installed</Publish>

      <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" 
Value="MaintenanceTypeDlg">1</Publish>

      <Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" 
Event="NewDialog" Value="FeaturesDlg">1</Publish>
      <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" 
Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
      <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" 
Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
      <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" 
Value="MaintenanceWelcomeDlg">1</Publish>

      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" 
Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" 
Value="WelcomeDlg" Order="3">Installed AND PATCH</Publish>

      <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" 
Value="VerifyReadyDlg">Installed AND PATCH</Publish>
    </UI>

    <InstallUISequence>
      <Show Dialog="WelcomeDlg" Before="AdvancedWelcomeEulaDlg" >Installed AND 
PATCH</Show>
    </InstallUISequence>

    <Property Id="WIXUI_INSTALLDIR" Value="APPLICATIONFOLDER" />
    <UIRef Id="WixUI_Common" />
  </Fragment>
</Wix>

I got a lot of compiler errors because of things in this dialog sequence that 
were already defined.

LGHT0195: The Windows Installer XML variable 'WixUISupportPerUser' is declared 
in more than one location.  Please remove one of the declarations.

As I start taking definitions out of this fragment, the compiler continues to 
complain about more of them. I remove the WixVariables, InstallUISequence and 
InstallExecuteSequence as I can kind of understand that they are declared in 
the UI assembly.

I'm then left with

<?xml version="1.0" encoding="UTF-8"?>
<!--
This is a copy of the WixUI_Advanced UI sequence.
The only change is to remove the option to select an install directory
-->
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi";>
  <Fragment>

    <PropertyRef Id="ApplicationFolderName" />

    <UI Id="UISequence">
      <TextStyle Id="WixUI_Font_Normal" 
FaceName="!(loc.Advanced_Font_FaceName)" 
Size="!(loc.Advanced_Font_Normal_Size)" />
      <TextStyle Id="WixUI_Font_Bigger" 
FaceName="!(loc.Advanced_Font_FaceName)" 
Size="!(loc.Advanced_Font_Bigger_Size)" />
      <TextStyle Id="WixUI_Font_Title" FaceName="!(loc.Advanced_Font_FaceName)" 
Size="!(loc.Advanced_Font_Title_Size)" Bold="yes" />
      <TextStyle Id="WixUI_Font_Emphasized" 
FaceName="!(loc.Advanced_Font_FaceName)" 
Size="!(loc.Advanced_Font_Emphasized_Size)" Bold="yes" />

      <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
     <Property Id="WixUI_Mode" Value="Advanced" />

      <DialogRef Id="BrowseDlg" />
      <DialogRef Id="DiskCostDlg" />
      <DialogRef Id="ErrorDlg" />
      <DialogRef Id="FatalError" />
      <DialogRef Id="FilesInUse" />
      <DialogRef Id="MsiRMFilesInUse" />
      <DialogRef Id="PrepareDlg" />
      <DialogRef Id="ProgressDlg" />
      <DialogRef Id="ResumeDlg" />
      <DialogRef Id="UserExit" />
      <DialogRef Id="WelcomeDlg"/>

      <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" 
Value="Return" Order="999">1</Publish>

      <Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" 
Value="WixUIValidatePath" Order="1">1</Publish>
      <Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" 
Value="InvalidDirDlg" 
Order="2"><![CDATA[WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>

      <Publish Dialog="AdvancedWelcomeEulaDlg" Control="Advanced" 
Event="NewDialog" Value="InstallScopeDlg" 
Order="1">!(wix.WixUISupportPerMachine) AND !(wix.WixUISupportPerUser)</Publish>
      <Publish Dialog="AdvancedWelcomeEulaDlg" Control="Advanced" 
Event="NewDialog" Value="FeaturesDlg" Order="2">NOT 
!(wix.WixUISupportPerMachine)</Publish>
      <Publish Dialog="AdvancedWelcomeEulaDlg" Control="Advanced" 
Event="NewDialog" Value="InstallScopeDlg" 
Order="3">!(wix.WixUISupportPerMachine) AND NOT 
!(wix.WixUISupportPerUser)</Publish>

      <Publish Dialog="InstallScopeDlg" Control="Back" Event="NewDialog" 
Value="AdvancedWelcomeEulaDlg">1</Publish>
      <!-- override default WixAppFolder of WixPerMachineFolder as standard 
user won't be shown the radio group to set WixAppFolder -->
      <Publish Dialog="InstallScopeDlg" Control="Next" Property="WixAppFolder" 
Value="WixPerUserFolder" Order="1">!(wix.WixUISupportPerUser) AND NOT 
Privileged</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" Property="ALLUSERS" 
Value="{}" Order="2">WixAppFolder = "WixPerUserFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" Property="ALLUSERS" 
Value="1" Order="3">WixAppFolder = "WixPerMachineFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" 
Property="APPLICATIONFOLDER" Value="[WixPerUserFolder]" Order="4">WixAppFolder 
= "WixPerUserFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" 
Property="APPLICATIONFOLDER" Value="[WixPerMachineFolder]" 
Order="5">WixAppFolder = "WixPerMachineFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" Event="NewDialog" 
Value="FeaturesDlg" Order="6">WixAppFolder = "WixPerUserFolder"</Publish>
      <Publish Dialog="InstallScopeDlg" Control="Next" Event="NewDialog" 
Value="FeaturesDlg" Order="7">WixAppFolder = "WixPerMachineFolder"</Publish>

      <Publish Dialog="FeaturesDlg" Control="Back" Event="NewDialog" 
Value="InstallScopeDlg">NOT Installed AND WixAppFolder = 
"WixPerUserFolder"</Publish>
      <Publish Dialog="FeaturesDlg" Control="Back" Event="NewDialog" 
Value="InstallScopeDlg">NOT Installed AND WixAppFolder = 
"WixPerMachineFolder"</Publish>
     <Publish Dialog="FeaturesDlg" Control="Back" Event="NewDialog" 
Value="MaintenanceTypeDlg">Installed</Publish>

      <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" 
Value="MaintenanceTypeDlg">1</Publish>

      <Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" 
Event="NewDialog" Value="FeaturesDlg">1</Publish>
      <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" 
Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
      <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" 
Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
      <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" 
Value="MaintenanceWelcomeDlg">1</Publish>

      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" 
Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
      <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" 
Value="WelcomeDlg" Order="3">Installed AND PATCH</Publish>

      <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" 
Value="VerifyReadyDlg">Installed AND PATCH</Publish>
    </UI>

    <Property Id="WIXUI_INSTALLDIR" Value="APPLICATIONFOLDER" />
    <UIRef Id="WixUI_Common" />
  </Fragment>
</Wix>

The compiler then starts to complain about duplicate entries for the publish 
control events.

error LGHT0130: The primary key 'ExitDialog/Finish/EndDialog/Return/1' is 
duplicated in table 'ControlEvent'.  Please remove one of the entries or rename 
a part of the primary key to avoid the collision.

I can't see anywhere in my project that still has a reference to 
WixUI_Advanced. Any idea how to fix this?

Cheers,

Rory
------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to