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
[email protected]
https://lists.sourceforge.net/lists/listinfo/wix-users