aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Arnson <bob@firegiant.com>2022-09-09 21:23:26 -0400
committerBob Arnson <github@bobs.org>2022-09-12 13:33:03 -0400
commit5059f83d7dccd7221458fca414a0756bb83466a5 (patch)
tree485ccc37c018fb806fa76ea0401cfb7bfb24d315
parent6a45cb7687de57056532fe897a708435deec2ea3 (diff)
downloadwix-5059f83d7dccd7221458fca414a0756bb83466a5.tar.gz
wix-5059f83d7dccd7221458fca414a0756bb83466a5.tar.bz2
wix-5059f83d7dccd7221458fca414a0756bb83466a5.zip
Support bundle updates in WixStdBA.
Fixes https://github.com/wixtoolset/issues/issues/6894.
-rw-r--r--src/burn/engine/detect.cpp2
-rw-r--r--src/ext/Bal/wixstdba/Resources/HyperlinkLargeTheme.xml5
-rw-r--r--src/ext/Bal/wixstdba/Resources/HyperlinkSidebarTheme.xml5
-rw-r--r--src/ext/Bal/wixstdba/Resources/HyperlinkTheme.wxl2
-rw-r--r--src/ext/Bal/wixstdba/Resources/HyperlinkTheme.xml5
-rw-r--r--src/ext/Bal/wixstdba/Resources/RtfLargeTheme.xml5
-rw-r--r--src/ext/Bal/wixstdba/Resources/RtfTheme.wxl2
-rw-r--r--src/ext/Bal/wixstdba/Resources/RtfTheme.xml5
-rw-r--r--src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp121
-rw-r--r--src/test/burn/TestBA/TestBA.cs2
-rw-r--r--src/test/burn/TestData/WixStdBaTests/BundleA/Bundle.wxs2
11 files changed, 152 insertions, 4 deletions
diff --git a/src/burn/engine/detect.cpp b/src/burn/engine/detect.cpp
index 25d184c1..fcd1c966 100644
--- a/src/burn/engine/detect.cpp
+++ b/src/burn/engine/detect.cpp
@@ -400,7 +400,7 @@ static HRESULT DetectAtomFeedUpdate(
400 APPLICATION_UPDATE_ENTRY* pAppUpdateEntry = &pApupChain->rgEntries[i]; 400 APPLICATION_UPDATE_ENTRY* pAppUpdateEntry = &pApupChain->rgEntries[i];
401 APPLICATION_UPDATE_ENCLOSURE* pEnclosure = pAppUpdateEntry->rgEnclosures; 401 APPLICATION_UPDATE_ENCLOSURE* pEnclosure = pAppUpdateEntry->rgEnclosures;
402 402
403 if (pEnclosure) 403 if (pEnclosure && pEnclosure->rgbDigest && *pEnclosure->rgbDigest)
404 { 404 {
405 hr = StrAllocHexEncode(pEnclosure->rgbDigest, pEnclosure->cbDigest, &sczHash); 405 hr = StrAllocHexEncode(pEnclosure->rgbDigest, pEnclosure->cbDigest, &sczHash);
406 ExitOnFailure(hr, "Failed to encode hash as string."); 406 ExitOnFailure(hr, "Failed to encode hash as string.");
diff --git a/src/ext/Bal/wixstdba/Resources/HyperlinkLargeTheme.xml b/src/ext/Bal/wixstdba/Resources/HyperlinkLargeTheme.xml
index c018249f..6e7b69ee 100644
--- a/src/ext/Bal/wixstdba/Resources/HyperlinkLargeTheme.xml
+++ b/src/ext/Bal/wixstdba/Resources/HyperlinkLargeTheme.xml
@@ -12,6 +12,9 @@
12 <ImageControl X="11" Y="11" Width="64" Height="64" ImageFile="logo.png" Visible="yes"/> 12 <ImageControl X="11" Y="11" Width="64" Height="64" ImageFile="logo.png" Visible="yes"/>
13 <Label X="80" Y="11" Width="-11" Height="64" FontId="1" Visible="yes" DisablePrefix="yes">#(loc.Title)</Label> 13 <Label X="80" Y="11" Width="-11" Height="64" FontId="1" Visible="yes" DisablePrefix="yes">#(loc.Title)</Label>
14 14
15 <Page Name="Loading">
16 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes" Visible="no" Name="CheckingForUpdatesLabel" />
17 </Page>
15 <Page Name="Help"> 18 <Page Name="Help">
16 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.HelpHeader)</Label> 19 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.HelpHeader)</Label>
17 <Label X="11" Y="112" Width="-11" Height="-35" FontId="3" DisablePrefix="yes">#(loc.HelpText)</Label> 20 <Label X="11" Y="112" Width="-11" Height="-35" FontId="3" DisablePrefix="yes">#(loc.HelpText)</Label>
@@ -29,6 +32,7 @@
29 <Hypertext Name="EulaHyperlink" X="11" Y="-107" Width="-11" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallLicenseLinkText)</Hypertext> 32 <Hypertext Name="EulaHyperlink" X="11" Y="-107" Width="-11" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallLicenseLinkText)</Hypertext>
30 <Label Name="InstallVersion" X="11" Y="-73" Width="246" Height="17" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBAShowVersion">#(loc.InstallVersion)</Label> 33 <Label Name="InstallVersion" X="11" Y="-73" Width="246" Height="17" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBAShowVersion">#(loc.InstallVersion)</Label>
31 <Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox> 34 <Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox>
35 <Button Name="InstallUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
32 <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI"> 36 <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI">
33 <Text>#(loc.InstallOptionsButton)</Text> 37 <Text>#(loc.InstallOptionsButton)</Text>
34 <ChangePageAction Page="Options" /> 38 <ChangePageAction Page="Options" />
@@ -65,6 +69,7 @@
65 </Page> 69 </Page>
66 <Page Name="Modify"> 70 <Page Name="Modify">
67 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label> 71 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label>
72 <Button Name="ModifyUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
68 <Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button> 73 <Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button>
69 <Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button> 74 <Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button>
70 <Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0"> 75 <Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
diff --git a/src/ext/Bal/wixstdba/Resources/HyperlinkSidebarTheme.xml b/src/ext/Bal/wixstdba/Resources/HyperlinkSidebarTheme.xml
index 3630b5b9..59a03ad0 100644
--- a/src/ext/Bal/wixstdba/Resources/HyperlinkSidebarTheme.xml
+++ b/src/ext/Bal/wixstdba/Resources/HyperlinkSidebarTheme.xml
@@ -19,6 +19,9 @@
19 <CloseWindowAction /> 19 <CloseWindowAction />
20 </Button> 20 </Button>
21 </Page> 21 </Page>
22 <Page Name="Loading">
23 <Label X="185" Y="50" Width="-11" Height="30" FontId="2" DisablePrefix="yes" Visible="no" Name="CheckingForUpdatesLabel" />
24 </Page>
22 <Page Name="Install"> 25 <Page Name="Install">
23 <Label X="185" Y="11" Width="-11" Height="32" FontId="1" DisablePrefix="yes">#(loc.Title)</Label> 26 <Label X="185" Y="11" Width="-11" Height="32" FontId="1" DisablePrefix="yes">#(loc.Title)</Label>
24 <ImageControl X="11" Y="11" Width="165" Height="400" ImageFile="logoside.png"/> 27 <ImageControl X="11" Y="11" Width="165" Height="400" ImageFile="logoside.png"/>
@@ -30,6 +33,7 @@
30 <Hypertext Name="EulaHyperlink" X="185" Y="-111" Width="-11" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallLicenseLinkText)</Hypertext> 33 <Hypertext Name="EulaHyperlink" X="185" Y="-111" Width="-11" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallLicenseLinkText)</Hypertext>
31 <Label Name="InstallVersion" X="185" Y="-81" Width="-11" Height="17" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBAShowVersion">#(loc.InstallVersion)</Label> 34 <Label Name="InstallVersion" X="185" Y="-81" Width="-11" Height="17" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBAShowVersion">#(loc.InstallVersion)</Label>
32 <Checkbox Name="EulaAcceptCheckbox" X="185" Y="-51" Width="-11" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox> 35 <Checkbox Name="EulaAcceptCheckbox" X="185" Y="-51" Width="-11" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox>
36 <Button Name="InstallUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
33 <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI"> 37 <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI">
34 <Text>#(loc.InstallOptionsButton)</Text> 38 <Text>#(loc.InstallOptionsButton)</Text>
35 <ChangePageAction Page="Options" /> 39 <ChangePageAction Page="Options" />
@@ -72,6 +76,7 @@
72 <Label X="185" Y="11" Width="-11" Height="32" FontId="1" DisablePrefix="yes">#(loc.Title)</Label> 76 <Label X="185" Y="11" Width="-11" Height="32" FontId="1" DisablePrefix="yes">#(loc.Title)</Label>
73 <ImageControl X="11" Y="11" Width="165" Height="400" ImageFile="logoside.png"/> 77 <ImageControl X="11" Y="11" Width="165" Height="400" ImageFile="logoside.png"/>
74 <Label X="185" Y="50" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label> 78 <Label X="185" Y="50" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label>
79 <Button Name="ModifyUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
75 <Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button> 80 <Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button>
76 <Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button> 81 <Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button>
77 <Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0"> 82 <Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
diff --git a/src/ext/Bal/wixstdba/Resources/HyperlinkTheme.wxl b/src/ext/Bal/wixstdba/Resources/HyperlinkTheme.wxl
index 8d222a3b..1ce15453 100644
--- a/src/ext/Bal/wixstdba/Resources/HyperlinkTheme.wxl
+++ b/src/ext/Bal/wixstdba/Resources/HyperlinkTheme.wxl
@@ -5,6 +5,8 @@
5<WixLocalization Culture="en-us" Language="1033" xmlns="http://wixtoolset.org/schemas/v4/wxl"> 5<WixLocalization Culture="en-us" Language="1033" xmlns="http://wixtoolset.org/schemas/v4/wxl">
6 <String Id="Caption">[WixBundleName] Setup</String> 6 <String Id="Caption">[WixBundleName] Setup</String>
7 <String Id="Title">[WixBundleName]</String> 7 <String Id="Title">[WixBundleName]</String>
8 <String Id="CheckingForUpdatesLabel">Checking for updates</String>
9 <String Id="UpdateButton">&amp;Update to version [WixStdBAUpdateAvailable]</String>
8 <String Id="InstallHeader">Welcome</String> 10 <String Id="InstallHeader">Welcome</String>
9 <String Id="InstallMessage">Setup will install [WixBundleName] on your computer. Click Install to continue or Cancel to exit.</String> 11 <String Id="InstallMessage">Setup will install [WixBundleName] on your computer. Click Install to continue or Cancel to exit.</String>
10 <String Id="InstallMessageOptions">Setup will install [WixBundleName] on your computer. Click Install to continue, Options to set installation options, or Cancel to exit.</String> 12 <String Id="InstallMessageOptions">Setup will install [WixBundleName] on your computer. Click Install to continue, Options to set installation options, or Cancel to exit.</String>
diff --git a/src/ext/Bal/wixstdba/Resources/HyperlinkTheme.xml b/src/ext/Bal/wixstdba/Resources/HyperlinkTheme.xml
index e654fe23..c82e1b9f 100644
--- a/src/ext/Bal/wixstdba/Resources/HyperlinkTheme.xml
+++ b/src/ext/Bal/wixstdba/Resources/HyperlinkTheme.xml
@@ -20,9 +20,13 @@
20 <CloseWindowAction /> 20 <CloseWindowAction />
21 </Button> 21 </Button>
22 </Page> 22 </Page>
23 <Page Name="Loading">
24 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes" Visible="no" Name="CheckingForUpdatesLabel" />
25 </Page>
23 <Page Name="Install"> 26 <Page Name="Install">
24 <Hypertext Name="EulaHyperlink" X="11" Y="121" Width="-11" Height="51" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallLicenseLinkText)</Hypertext> 27 <Hypertext Name="EulaHyperlink" X="11" Y="121" Width="-11" Height="51" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallLicenseLinkText)</Hypertext>
25 <Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox> 28 <Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox>
29 <Button Name="InstallUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
26 <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI"> 30 <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI">
27 <Text>#(loc.InstallOptionsButton)</Text> 31 <Text>#(loc.InstallOptionsButton)</Text>
28 <ChangePageAction Page="Options" /> 32 <ChangePageAction Page="Options" />
@@ -59,6 +63,7 @@
59 </Page> 63 </Page>
60 <Page Name="Modify"> 64 <Page Name="Modify">
61 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label> 65 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label>
66 <Button Name="ModifyUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
62 <Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button> 67 <Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button>
63 <Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button> 68 <Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button>
64 <Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0"> 69 <Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
diff --git a/src/ext/Bal/wixstdba/Resources/RtfLargeTheme.xml b/src/ext/Bal/wixstdba/Resources/RtfLargeTheme.xml
index e5d18ec7..b30fe3cd 100644
--- a/src/ext/Bal/wixstdba/Resources/RtfLargeTheme.xml
+++ b/src/ext/Bal/wixstdba/Resources/RtfLargeTheme.xml
@@ -20,11 +20,15 @@
20 <CloseWindowAction /> 20 <CloseWindowAction />
21 </Button> 21 </Button>
22 </Page> 22 </Page>
23 <Page Name="Loading">
24 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes" Visible="no" Name="CheckingForUpdatesLabel" />
25 </Page>
23 <Page Name="Install"> 26 <Page Name="Install">
24 <Label X="11" Y="80" Width="-11" Height="-70" TabStop="no" FontId="2" HexStyle="800000" DisablePrefix="yes" /> 27 <Label X="11" Y="80" Width="-11" Height="-70" TabStop="no" FontId="2" HexStyle="800000" DisablePrefix="yes" />
25 <Richedit Name="EulaRichedit" X="12" Y="81" Width="-12" Height="-71" TabStop="yes" FontId="0" /> 28 <Richedit Name="EulaRichedit" X="12" Y="81" Width="-12" Height="-71" TabStop="yes" FontId="0" />
26 <Label Name="InstallVersion" X="11" Y="-41" Width="210" Height="17" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBAShowVersion">#(loc.InstallVersion)</Label> 29 <Label Name="InstallVersion" X="11" Y="-41" Width="210" Height="17" FontId="3" DisablePrefix="yes" VisibleCondition="WixStdBAShowVersion">#(loc.InstallVersion)</Label>
27 <Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox> 30 <Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox>
31 <Button Name="InstallUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
28 <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI"> 32 <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI">
29 <Text>#(loc.InstallOptionsButton)</Text> 33 <Text>#(loc.InstallOptionsButton)</Text>
30 <ChangePageAction Page="Options" /> 34 <ChangePageAction Page="Options" />
@@ -61,6 +65,7 @@
61 </Page> 65 </Page>
62 <Page Name="Modify"> 66 <Page Name="Modify">
63 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label> 67 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label>
68 <Button Name="ModifyUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
64 <Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button> 69 <Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button>
65 <Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button> 70 <Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button>
66 <Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0"> 71 <Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
diff --git a/src/ext/Bal/wixstdba/Resources/RtfTheme.wxl b/src/ext/Bal/wixstdba/Resources/RtfTheme.wxl
index efe66f41..8125f17e 100644
--- a/src/ext/Bal/wixstdba/Resources/RtfTheme.wxl
+++ b/src/ext/Bal/wixstdba/Resources/RtfTheme.wxl
@@ -5,6 +5,8 @@
5<WixLocalization Culture="en-us" Language="1033" xmlns="http://wixtoolset.org/schemas/v4/wxl"> 5<WixLocalization Culture="en-us" Language="1033" xmlns="http://wixtoolset.org/schemas/v4/wxl">
6 <String Id="Caption">[WixBundleName] Setup</String> 6 <String Id="Caption">[WixBundleName] Setup</String>
7 <String Id="Title">[WixBundleName]</String> 7 <String Id="Title">[WixBundleName]</String>
8 <String Id="CheckingForUpdatesLabel">Checking for updates</String>
9 <String Id="UpdateButton">&amp;Update to version [WixStdBAUpdateAvailable]</String>
8 <String Id="InstallVersion">Version [WixBundleVersion]</String> 10 <String Id="InstallVersion">Version [WixBundleVersion]</String>
9 <String Id="ConfirmCancelMessage">Are you sure you want to cancel?</String> 11 <String Id="ConfirmCancelMessage">Are you sure you want to cancel?</String>
10 <String Id="ExecuteUpgradeRelatedBundleMessage">Previous version</String> 12 <String Id="ExecuteUpgradeRelatedBundleMessage">Previous version</String>
diff --git a/src/ext/Bal/wixstdba/Resources/RtfTheme.xml b/src/ext/Bal/wixstdba/Resources/RtfTheme.xml
index 72345343..e1a486c8 100644
--- a/src/ext/Bal/wixstdba/Resources/RtfTheme.xml
+++ b/src/ext/Bal/wixstdba/Resources/RtfTheme.xml
@@ -20,9 +20,13 @@
20 <CloseWindowAction /> 20 <CloseWindowAction />
21 </Button> 21 </Button>
22 </Page> 22 </Page>
23 <Page Name="Loading">
24 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes" Visible="no" Name="CheckingForUpdatesLabel" />
25 </Page>
23 <Page Name="Install"> 26 <Page Name="Install">
24 <Richedit Name="EulaRichedit" X="11" Y="80" Width="-11" Height="-70" TabStop="yes" FontId="0" HexStyle="800000" /> 27 <Richedit Name="EulaRichedit" X="11" Y="80" Width="-11" Height="-70" TabStop="yes" FontId="0" HexStyle="800000" />
25 <Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox> 28 <Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox>
29 <Button Name="InstallUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
26 <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI"> 30 <Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" VisibleCondition="NOT WixStdBASuppressOptionsUI">
27 <Text>#(loc.InstallOptionsButton)</Text> 31 <Text>#(loc.InstallOptionsButton)</Text>
28 <ChangePageAction Page="Options" /> 32 <ChangePageAction Page="Options" />
@@ -59,6 +63,7 @@
59 </Page> 63 </Page>
60 <Page Name="Modify"> 64 <Page Name="Modify">
61 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label> 65 <Label X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Label>
66 <Button Name="ModifyUpdateButton" X="11" Y="-11" Width="200" Height="23" TabStop="yes" FontId="0" EnableCondition="WixStdBAUpdateAvailable" HideWhenDisabled="yes">#(loc.UpdateButton)</Button>
62 <Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button> 67 <Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button>
63 <Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button> 68 <Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button>
64 <Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0"> 69 <Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">
diff --git a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
index 50de2c7f..3539450e 100644
--- a/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
+++ b/src/ext/Bal/wixstdba/WixStandardBootstrapperApplication.cpp
@@ -23,6 +23,7 @@ static const LPCWSTR WIXSTDBA_VARIABLE_LANGUAGE_ID = L"WixStdBALanguageId";
23static const LPCWSTR WIXSTDBA_VARIABLE_RESTART_REQUIRED = L"WixStdBARestartRequired"; 23static const LPCWSTR WIXSTDBA_VARIABLE_RESTART_REQUIRED = L"WixStdBARestartRequired";
24static const LPCWSTR WIXSTDBA_VARIABLE_SHOW_VERSION = L"WixStdBAShowVersion"; 24static const LPCWSTR WIXSTDBA_VARIABLE_SHOW_VERSION = L"WixStdBAShowVersion";
25static const LPCWSTR WIXSTDBA_VARIABLE_SUPPRESS_OPTIONS_UI = L"WixStdBASuppressOptionsUI"; 25static const LPCWSTR WIXSTDBA_VARIABLE_SUPPRESS_OPTIONS_UI = L"WixStdBASuppressOptionsUI";
26static const LPCWSTR WIXSTDBA_VARIABLE_UPDATE_AVAILABLE = L"WixStdBAUpdateAvailable";
26 27
27enum WIXSTDBA_STATE 28enum WIXSTDBA_STATE
28{ 29{
@@ -98,6 +99,11 @@ enum WIXSTDBA_CONTROL
98 WIXSTDBA_CONTROL_REPAIR_BUTTON, 99 WIXSTDBA_CONTROL_REPAIR_BUTTON,
99 WIXSTDBA_CONTROL_UNINSTALL_BUTTON, 100 WIXSTDBA_CONTROL_UNINSTALL_BUTTON,
100 101
102 // Updates
103 WIXSTDBA_CONTROL_CHECKING_FOR_UPDATES_LABEL,
104 WIXSTDBA_CONTROL_INSTALL_UPDATE_BUTTON,
105 WIXSTDBA_CONTROL_MODIFY_UPDATE_BUTTON,
106
101 // Progress page 107 // Progress page
102 WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT, 108 WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT,
103 WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR, 109 WIXSTDBA_CONTROL_CACHE_PROGRESS_BAR,
@@ -342,6 +348,70 @@ public: // IBootstrapperApplication
342 } 348 }
343 349
344 350
351 virtual STDMETHODIMP OnDetectUpdateBegin(
352 __in_z LPCWSTR wzUpdateLocation,
353 __inout BOOL* pfCancel,
354 __inout BOOL* pfSkip
355 )
356 {
357#ifdef DEBUG
358 BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: OnDetectUpdateBegin() - update location: %ls", wzUpdateLocation);
359#endif
360
361 // Try update detection only if we have a potential update source and are in full UI mode.
362 *pfSkip = !wzUpdateLocation
363 || !*wzUpdateLocation
364 || BOOTSTRAPPER_DISPLAY_FULL != m_command.display;
365
366 ThemeShowControl(m_pControlCheckingForUpdatesLabel, *pfSkip ? SW_HIDE : SW_SHOW);
367
368 return __super::OnDetectUpdateBegin(wzUpdateLocation, pfCancel, pfSkip);
369 }
370
371
372 virtual STDMETHODIMP OnDetectUpdate(
373 __in_z LPCWSTR wzUpdateLocation,
374 __in DWORD64 dw64Size,
375 __in_z_opt LPCWSTR wzHash,
376 __in BOOTSTRAPPER_UPDATE_HASH_TYPE hashAlgorithm,
377 __in LPCWSTR wzUpdateVersion,
378 __in_z LPCWSTR wzTitle,
379 __in_z LPCWSTR wzSummary,
380 __in_z LPCWSTR wzContentType,
381 __in_z LPCWSTR wzContent,
382 __inout BOOL* pfCancel,
383 __inout BOOL* pfStopProcessingUpdates
384 )
385 {
386 HRESULT hr = S_OK;
387 int nResult = 0;
388
389 hr = VerCompareStringVersions(m_sczBundleVersion, wzUpdateVersion, TRUE/*fStrict*/, &nResult);
390 BalExitOnFailure(hr, "Failed to compare bundle version: %ls to update version: %ls.", m_sczBundleVersion, wzUpdateVersion);
391
392 // Burn sends the feed in descending version order so we need only the first one.
393 *pfStopProcessingUpdates = TRUE;
394
395 if (0 <= nResult)
396 {
397 BalLog(BOOTSTRAPPER_LOG_LEVEL_VERBOSE, "WIXSTDBA: Update version: %ls is a match or downgrade for bundle version: %ls.", wzUpdateVersion, m_sczBundleVersion);
398 }
399 else
400 {
401 BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: Update v%ls for bundle v%ls available from: %ls.", wzUpdateVersion, m_sczBundleVersion, wzUpdateLocation);
402
403 hr = BalSetVersionVariable(WIXSTDBA_VARIABLE_UPDATE_AVAILABLE, wzUpdateVersion);
404 BalExitOnFailure(hr, "Failed to set WixStdBAUpdateAvailable value: %ls.", wzUpdateVersion);
405
406 hr = m_pEngine->SetUpdate(NULL, wzUpdateLocation, dw64Size, hashAlgorithm, wzHash);
407 BalExitOnFailure(hr, "Failed to set update location: %ls.", wzUpdateLocation);
408 }
409
410 LExit:
411 return __super::OnDetectUpdate(wzUpdateLocation, dw64Size, wzHash, hashAlgorithm, wzUpdateVersion, wzTitle, wzSummary, wzContentType, wzContent, pfCancel, pfStopProcessingUpdates);
412 }
413
414
345 virtual STDMETHODIMP OnDetectComplete( 415 virtual STDMETHODIMP OnDetectComplete(
346 __in HRESULT hrStatus, 416 __in HRESULT hrStatus,
347 __in BOOL /*fEligibleForCleanup*/ 417 __in BOOL /*fEligibleForCleanup*/
@@ -3741,10 +3811,10 @@ private:
3741 3811
3742 m_state = state; 3812 m_state = state;
3743 3813
3744 // If our install is at the end (success or failure) and we're not showing full UI or 3814 // If our install is at the end (success or failure) and we're not showing full UI or not updating or
3745 // we successfully installed the prerequisite(s) and either no restart is required or can automatically restart 3815 // we successfully installed the prerequisite(s) and either no restart is required or can automatically restart
3746 // then exit. 3816 // then exit.
3747 if ((WIXSTDBA_STATE_APPLIED <= m_state && BOOTSTRAPPER_DISPLAY_FULL > m_command.display) || 3817 if ((WIXSTDBA_STATE_APPLIED <= m_state && (BOOTSTRAPPER_DISPLAY_FULL > m_command.display || BOOTSTRAPPER_ACTION_UPDATE_REPLACE == m_plannedAction)) ||
3748 (WIXSTDBA_STATE_APPLIED == m_state && m_fPrereq && (!m_fRestartRequired || m_fShouldRestart && m_fAllowRestart))) 3818 (WIXSTDBA_STATE_APPLIED == m_state && m_fPrereq && (!m_fRestartRequired || m_fShouldRestart && m_fAllowRestart)))
3749 { 3819 {
3750 // Quietly exit. 3820 // Quietly exit.
@@ -4038,6 +4108,15 @@ private:
4038 4108
4039 4109
4040 // 4110 //
4111 // OnClickUpdateButton - start the update process.
4112 //
4113 void OnClickUpdateButton()
4114 {
4115 this->OnPlan(BOOTSTRAPPER_ACTION_UPDATE_REPLACE);
4116 }
4117
4118
4119 //
4041 // OnClickCloseButton - close the application. 4120 // OnClickCloseButton - close the application.
4042 // 4121 //
4043 void OnClickCloseButton() 4122 void OnClickCloseButton()
@@ -4263,6 +4342,13 @@ private:
4263 pResults->lResult = 0; 4342 pResults->lResult = 0;
4264 ExitFunction(); 4343 ExitFunction();
4265 4344
4345 case WIXSTDBA_CONTROL_INSTALL_UPDATE_BUTTON:
4346 case WIXSTDBA_CONTROL_MODIFY_UPDATE_BUTTON:
4347 OnClickUpdateButton();
4348 fProcessed = TRUE;
4349 pResults->lResult = 0;
4350 ExitFunction();
4351
4266 case WIXSTDBA_CONTROL_LAUNCH_BUTTON: 4352 case WIXSTDBA_CONTROL_LAUNCH_BUTTON:
4267 OnClickLaunchButton(); 4353 OnClickLaunchButton();
4268 fProcessed = TRUE; 4354 fProcessed = TRUE;
@@ -4381,6 +4467,10 @@ LExit:
4381 __in HRESULT hrStatus 4467 __in HRESULT hrStatus
4382 ) 4468 )
4383 { 4469 {
4470#ifdef DEBUG
4471 BalLog(BOOTSTRAPPER_LOG_LEVEL_STANDARD, "WIXSTDBA: SetState() - setting state to %u with status 0x%08x.", state, hrStatus);
4472#endif
4473
4384 if (FAILED(hrStatus)) 4474 if (FAILED(hrStatus))
4385 { 4475 {
4386 m_hrFinal = hrStatus; 4476 m_hrFinal = hrStatus;
@@ -4786,6 +4876,27 @@ public:
4786 m_pControlUninstallButton = NULL; 4876 m_pControlUninstallButton = NULL;
4787 ++pAssignControl; 4877 ++pAssignControl;
4788 4878
4879 pAssignControl->wId = WIXSTDBA_CONTROL_CHECKING_FOR_UPDATES_LABEL;
4880 pAssignControl->wzName = L"CheckingForUpdatesLabel";
4881 pAssignControl->ppControl = &m_pControlCheckingForUpdatesLabel;
4882 pAssignControl->dwAutomaticBehaviorType = dwAutomaticBehaviorType;
4883 m_pControlCheckingForUpdatesLabel = NULL;
4884 ++pAssignControl;
4885
4886 pAssignControl->wId = WIXSTDBA_CONTROL_INSTALL_UPDATE_BUTTON;
4887 pAssignControl->wzName = L"InstallUpdateButton";
4888 pAssignControl->ppControl = &m_pControlInstallUpdateButton;
4889 pAssignControl->dwAutomaticBehaviorType = THEME_CONTROL_AUTOMATIC_BEHAVIOR_ALL;
4890 m_pControlInstallUpdateButton = NULL;
4891 ++pAssignControl;
4892
4893 pAssignControl->wId = WIXSTDBA_CONTROL_MODIFY_UPDATE_BUTTON;
4894 pAssignControl->wzName = L"ModifyUpdateButton";
4895 pAssignControl->ppControl = &m_pControlModifyUpdateButton;
4896 pAssignControl->dwAutomaticBehaviorType = THEME_CONTROL_AUTOMATIC_BEHAVIOR_ALL;
4897 m_pControlModifyUpdateButton = NULL;
4898 ++pAssignControl;
4899
4789 pAssignControl->wId = WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT; 4900 pAssignControl->wId = WIXSTDBA_CONTROL_CACHE_PROGRESS_PACKAGE_TEXT;
4790 pAssignControl->wzName = L"CacheProgressPackageText"; 4901 pAssignControl->wzName = L"CacheProgressPackageText";
4791 pAssignControl->ppControl = &m_pControlCacheProgressPackageText; 4902 pAssignControl->ppControl = &m_pControlCacheProgressPackageText;
@@ -4929,6 +5040,7 @@ public:
4929 ReleaseStr(m_sczLicenseUrl); 5040 ReleaseStr(m_sczLicenseUrl);
4930 ReleaseStr(m_sczBundleVersion); 5041 ReleaseStr(m_sczBundleVersion);
4931 ReleaseStr(m_sczAfterForcedRestartPackage); 5042 ReleaseStr(m_sczAfterForcedRestartPackage);
5043
4932 ReleaseNullObject(m_pEngine); 5044 ReleaseNullObject(m_pEngine);
4933 } 5045 }
4934 5046
@@ -4966,6 +5078,11 @@ private:
4966 const THEME_CONTROL* m_pControlRepairButton; 5078 const THEME_CONTROL* m_pControlRepairButton;
4967 const THEME_CONTROL* m_pControlUninstallButton; 5079 const THEME_CONTROL* m_pControlUninstallButton;
4968 5080
5081 // Update/loading pages
5082 const THEME_CONTROL* m_pControlCheckingForUpdatesLabel;
5083 const THEME_CONTROL* m_pControlInstallUpdateButton;
5084 const THEME_CONTROL* m_pControlModifyUpdateButton;
5085
4969 // Progress page 5086 // Progress page
4970 const THEME_CONTROL* m_pControlCacheProgressPackageText; 5087 const THEME_CONTROL* m_pControlCacheProgressPackageText;
4971 const THEME_CONTROL* m_pControlCacheProgressbar; 5088 const THEME_CONTROL* m_pControlCacheProgressbar;
diff --git a/src/test/burn/TestBA/TestBA.cs b/src/test/burn/TestBA/TestBA.cs
index 087219af..01109911 100644
--- a/src/test/burn/TestBA/TestBA.cs
+++ b/src/test/burn/TestBA/TestBA.cs
@@ -220,7 +220,7 @@ namespace WixToolset.Test.BA
220 if (!this.UpdateAvailable && this.Engine.CompareVersions(e.Version, this.Version) > 0) 220 if (!this.UpdateAvailable && this.Engine.CompareVersions(e.Version, this.Version) > 0)
221 { 221 {
222 this.Log(String.Format("Selected update v{0}", e.Version)); 222 this.Log(String.Format("Selected update v{0}", e.Version));
223 this.Engine.SetUpdate(null, e.UpdateLocation, e.Size, UpdateHashType.None, null); 223 this.Engine.SetUpdate(null, e.UpdateLocation, e.Size, e.HashAlgorithm, e.Hash);
224 this.UpdateAvailable = true; 224 this.UpdateAvailable = true;
225 } 225 }
226 } 226 }
diff --git a/src/test/burn/TestData/WixStdBaTests/BundleA/Bundle.wxs b/src/test/burn/TestData/WixStdBaTests/BundleA/Bundle.wxs
index 99320b35..98a00344 100644
--- a/src/test/burn/TestData/WixStdBaTests/BundleA/Bundle.wxs
+++ b/src/test/burn/TestData/WixStdBaTests/BundleA/Bundle.wxs
@@ -4,6 +4,8 @@
4 <Bundle Name="~$(var.TestGroupName) - $(var.BundleName)" Version="$(var.Version)" UpgradeCode="$(var.UpgradeCode)" Compressed="yes" bal:CommandLineVariables="caseSensitive"> 4 <Bundle Name="~$(var.TestGroupName) - $(var.BundleName)" Version="$(var.Version)" UpgradeCode="$(var.UpgradeCode)" Compressed="yes" bal:CommandLineVariables="caseSensitive">
5 <Log Prefix="~$(var.TestGroupName)_$(var.BundleName)" /> 5 <Log Prefix="~$(var.TestGroupName)_$(var.BundleName)" />
6 6
7 <Update Location='http://wixtoolset.org/releases/feed/v3.14' />
8
7 <Variable Name="TestGroupName" Value="$(var.TestGroupName)" /> 9 <Variable Name="TestGroupName" Value="$(var.TestGroupName)" />
8 10
9 <BootstrapperApplication> 11 <BootstrapperApplication>