diff options
Diffstat (limited to 'src')
7 files changed, 176 insertions, 5 deletions
diff --git a/src/Custom.Build.props b/src/Custom.Build.props new file mode 100644 index 00000000..889fb62e --- /dev/null +++ b/src/Custom.Build.props | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. --> | ||
| 2 | <Project> | ||
| 3 | <PropertyGroup Condition="'$(Configuration)'=='Release'"> | ||
| 4 | <TreatWarningsAsErrors>true</TreatWarningsAsErrors> | ||
| 5 | </PropertyGroup> | ||
| 6 | </Project> | ||
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs index f85a5b62..a24137f3 100644 --- a/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs | |||
| @@ -211,7 +211,9 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 211 | 211 | ||
| 212 | private void WritePayloadInfo(XmlTextWriter writer) | 212 | private void WritePayloadInfo(XmlTextWriter writer) |
| 213 | { | 213 | { |
| 214 | var payloadSymbols = this.Section.Symbols.OfType<WixBundlePayloadSymbol>(); | 214 | // TODO: check v3 - should this be only include package payloads or include all non-UX container payloads? |
| 215 | var payloadSymbols = this.Section.Symbols.OfType<WixBundlePayloadSymbol>() | ||
| 216 | .Where(p => !String.IsNullOrEmpty(p.PackageRef)); | ||
| 215 | 217 | ||
| 216 | foreach (var payloadSymbol in payloadSymbols) | 218 | foreach (var payloadSymbol in payloadSymbols) |
| 217 | { | 219 | { |
| @@ -219,10 +221,7 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 219 | 221 | ||
| 220 | writer.WriteAttributeString("Payload", payloadSymbol.Id.Id); | 222 | writer.WriteAttributeString("Payload", payloadSymbol.Id.Id); |
| 221 | 223 | ||
| 222 | if (!String.IsNullOrEmpty(payloadSymbol.PackageRef)) | 224 | writer.WriteAttributeString("Package", payloadSymbol.PackageRef); |
| 223 | { | ||
| 224 | writer.WriteAttributeString("Package", payloadSymbol.PackageRef); | ||
| 225 | } | ||
| 226 | 225 | ||
| 227 | if (!String.IsNullOrEmpty(payloadSymbol.ContainerRef)) | 226 | if (!String.IsNullOrEmpty(payloadSymbol.ContainerRef)) |
| 228 | { | 227 | { |
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs index 056b129b..7d75d74c 100644 --- a/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs +++ b/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs | |||
| @@ -569,6 +569,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind | |||
| 569 | /// </summary> | 569 | /// </summary> |
| 570 | /// <param name="actionSymbol">The action symbol to be sequenced.</param> | 570 | /// <param name="actionSymbol">The action symbol to be sequenced.</param> |
| 571 | /// <param name="requiredActionSymbols">Collection of actions which must be included.</param> | 571 | /// <param name="requiredActionSymbols">Collection of actions which must be included.</param> |
| 572 | /// <param name="firstReference">A dictionary used for detecting cyclic references among action symbols.</param> | ||
| 572 | private void SequenceActionSymbol(WixActionSymbol actionSymbol, Dictionary<string, WixActionSymbol> requiredActionSymbols, Dictionary<WixActionSymbol, WixActionSymbol> firstReference) | 573 | private void SequenceActionSymbol(WixActionSymbol actionSymbol, Dictionary<string, WixActionSymbol> requiredActionSymbols, Dictionary<WixActionSymbol, WixActionSymbol> firstReference) |
| 573 | { | 574 | { |
| 574 | var after = false; | 575 | var after = false; |
diff --git a/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs b/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs index 0660dd7b..2cc9a39e 100644 --- a/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | namespace WixToolsetTest.CoreIntegration | 3 | namespace WixToolsetTest.CoreIntegration |
| 4 | { | 4 | { |
| 5 | using System; | 5 | using System; |
| 6 | using System.Collections.Generic; | ||
| 6 | using System.IO; | 7 | using System.IO; |
| 7 | using System.Linq; | 8 | using System.Linq; |
| 8 | using System.Text; | 9 | using System.Text; |
| @@ -115,6 +116,11 @@ namespace WixToolsetTest.CoreIntegration | |||
| 115 | Assert.Equal($"<Registration Id='{bundleSymbol.BundleId}' ExecutableName='test.exe' PerMachine='yes' Tag='' Version='1.0.0.0' ProviderKey='{bundleSymbol.BundleId}'>" + | 116 | Assert.Equal($"<Registration Id='{bundleSymbol.BundleId}' ExecutableName='test.exe' PerMachine='yes' Tag='' Version='1.0.0.0' ProviderKey='{bundleSymbol.BundleId}'>" + |
| 116 | "<Arp Register='yes' DisplayName='~TestBundle' DisplayVersion='1.0.0.0' Publisher='Example Corporation' />" + | 117 | "<Arp Register='yes' DisplayName='~TestBundle' DisplayVersion='1.0.0.0' Publisher='Example Corporation' />" + |
| 117 | "</Registration>", registrationElement.GetTestXml()); | 118 | "</Registration>", registrationElement.GetTestXml()); |
| 119 | |||
| 120 | var msiPayloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload[@Id='test.msi']"); | ||
| 121 | var msiPayload = (XmlNode)Assert.Single(msiPayloads); | ||
| 122 | Assert.Equal("<Payload Id='test.msi' FilePath='test.msi' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a0' Container='WixAttachedContainer' />", | ||
| 123 | msiPayload.GetTestXml(new Dictionary<string, List<string>>() { { "Payload", new List<string> { "FileSize", "Hash" } } })); | ||
| 118 | } | 124 | } |
| 119 | 125 | ||
| 120 | var manifestResource = new Resource(ResourceType.Manifest, "#1", 1033); | 126 | var manifestResource = new Resource(ResourceType.Manifest, "#1", 1033); |
diff --git a/src/test/WixToolsetTest.CoreIntegration/BundleManifestFixture.cs b/src/test/WixToolsetTest.CoreIntegration/BundleManifestFixture.cs index ae83150a..3829cdf0 100644 --- a/src/test/WixToolsetTest.CoreIntegration/BundleManifestFixture.cs +++ b/src/test/WixToolsetTest.CoreIntegration/BundleManifestFixture.cs | |||
| @@ -51,6 +51,93 @@ namespace WixToolsetTest.CoreIntegration | |||
| 51 | } | 51 | } |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | [Fact(Skip = "Test demonstrates failure")] | ||
| 55 | public void PopulatesBAManifestWithPackageInformation() | ||
| 56 | { | ||
| 57 | var folder = TestData.Get(@"TestData"); | ||
| 58 | |||
| 59 | using (var fs = new DisposableFileSystem()) | ||
| 60 | { | ||
| 61 | var baseFolder = fs.GetFolder(); | ||
| 62 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
| 63 | var bundlePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
| 64 | var baFolderPath = Path.Combine(baseFolder, "ba"); | ||
| 65 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | ||
| 66 | |||
| 67 | var result = WixRunner.Execute(false, new[] | ||
| 68 | { | ||
| 69 | "build", | ||
| 70 | Path.Combine(folder, "CustomPackageDescription", "CustomPackageDescription.wxs"), | ||
| 71 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
| 72 | "-bindpath", Path.Combine(folder, ".Data"), | ||
| 73 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
| 74 | "-intermediateFolder", intermediateFolder, | ||
| 75 | "-o", bundlePath | ||
| 76 | }); | ||
| 77 | |||
| 78 | result.AssertSuccess(); | ||
| 79 | |||
| 80 | Assert.True(File.Exists(bundlePath)); | ||
| 81 | |||
| 82 | var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); | ||
| 83 | extractResult.AssertSuccess(); | ||
| 84 | |||
| 85 | var packageElements = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixPackageProperties"); | ||
| 86 | var ignoreAttributesByElementName = new Dictionary<string, List<string>> | ||
| 87 | { | ||
| 88 | { "WixPackageProperties", new List<string> { "DownloadSize", "PackageSize", "InstalledSize", "Version" } }, | ||
| 89 | }; | ||
| 90 | Assert.Equal(3, packageElements.Count); | ||
| 91 | Assert.Equal("<WixPackageProperties Package='burn.exe' Vital='yes' DisplayName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' DownloadSize='*' PackageSize='*' InstalledSize='*' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_burn.exe' RollbackLogPathVariable='WixBundleRollbackLog_burn.exe' Compressed='yes' Version='*' Cache='yes' />", packageElements[0].GetTestXml(ignoreAttributesByElementName)); | ||
| 92 | Assert.Equal("<WixPackageProperties Package='RemotePayloadExe' Vital='yes' DisplayName='Override RemotePayload display name' Description='Override RemotePayload description' DownloadSize='1' PackageSize='1' InstalledSize='1' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_RemotePayloadExe' RollbackLogPathVariable='WixBundleRollbackLog_RemotePayloadExe' Compressed='no' Version='1.0.0.0' Cache='yes' />", packageElements[1].GetTestXml()); | ||
| 93 | Assert.Equal("<WixPackageProperties Package='calc.exe' Vital='yes' DisplayName='Override harvested display name' Description='Override harvested description' DownloadSize='*' PackageSize='*' InstalledSize='*' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_calc.exe' RollbackLogPathVariable='WixBundleRollbackLog_calc.exe' Compressed='yes' Version='*' Cache='yes' />", packageElements[2].GetTestXml(ignoreAttributesByElementName)); | ||
| 94 | } | ||
| 95 | } | ||
| 96 | |||
| 97 | [Fact(Skip = "Test demonstrates failure")] | ||
| 98 | public void PopulatesBAManifestWithPayloadInformation() | ||
| 99 | { | ||
| 100 | var folder = TestData.Get(@"TestData"); | ||
| 101 | |||
| 102 | using (var fs = new DisposableFileSystem()) | ||
| 103 | { | ||
| 104 | var baseFolder = fs.GetFolder(); | ||
| 105 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
| 106 | var bundlePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
| 107 | var baFolderPath = Path.Combine(baseFolder, "ba"); | ||
| 108 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | ||
| 109 | |||
| 110 | var result = WixRunner.Execute(false, new[] | ||
| 111 | { | ||
| 112 | "build", | ||
| 113 | Path.Combine(folder, "SharedPayloadsBetweenPackages", "SharedPayloadsBetweenPackages.wxs"), | ||
| 114 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
| 115 | "-bindpath", Path.Combine(folder, ".Data"), | ||
| 116 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
| 117 | "-intermediateFolder", intermediateFolder, | ||
| 118 | "-o", bundlePath | ||
| 119 | }); | ||
| 120 | |||
| 121 | result.AssertSuccess(); | ||
| 122 | |||
| 123 | Assert.True(File.Exists(bundlePath)); | ||
| 124 | |||
| 125 | var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); | ||
| 126 | extractResult.AssertSuccess(); | ||
| 127 | |||
| 128 | var payloadElements = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixPayloadProperties"); | ||
| 129 | var ignoreAttributesByElementName = new Dictionary<string, List<string>> | ||
| 130 | { | ||
| 131 | { "WixPayloadProperties", new List<string> { "Size" } }, | ||
| 132 | }; | ||
| 133 | Assert.Equal(4, payloadElements.Count); | ||
| 134 | Assert.Equal("<WixPayloadProperties Payload='credwiz.exe' Package='credwiz.exe' Container='WixAttachedContainer' Name='credwiz.exe' Size='*' LayoutOnly='no' />", payloadElements[0].GetTestXml(ignoreAttributesByElementName)); | ||
| 135 | Assert.Equal("<WixPayloadProperties Payload='payue_e5DuhsDGlzJxWYPhqr6S7rkc' Package='credwiz.exe' Container='WixAttachedContainer' Name='SharedPayloadsBetweenPackages.wxs' Size='*' LayoutOnly='no' />", payloadElements[1].GetTestXml(ignoreAttributesByElementName)); | ||
| 136 | Assert.Equal("<WixPayloadProperties Payload='cscript.exe' Package='cscript.exe' Container='WixAttachedContainer' Name='cscript.exe' Size='*' LayoutOnly='no' />", payloadElements[2].GetTestXml(ignoreAttributesByElementName)); | ||
| 137 | Assert.Equal("<WixPayloadProperties Payload='payue_e5DuhsDGlzJxWYPhqr6S7rkc' Package='cscript.exe' Container='WixAttachedContainer' Name='SharedPayloadsBetweenPackages.wxs' Size='*' LayoutOnly='no' />", payloadElements[3].GetTestXml(ignoreAttributesByElementName)); | ||
| 138 | } | ||
| 139 | } | ||
| 140 | |||
| 54 | [Fact] | 141 | [Fact] |
| 55 | public void PopulatesBEManifestWithBundleExtensionBundleCustomData() | 142 | public void PopulatesBEManifestWithBundleExtensionBundleCustomData() |
| 56 | { | 143 | { |
| @@ -191,6 +278,48 @@ namespace WixToolsetTest.CoreIntegration | |||
| 191 | } | 278 | } |
| 192 | } | 279 | } |
| 193 | 280 | ||
| 281 | [Fact(Skip = "Test demonstrates failure")] | ||
| 282 | public void PopulatesManifestWithExePackages() | ||
| 283 | { | ||
| 284 | var folder = TestData.Get(@"TestData"); | ||
| 285 | |||
| 286 | using (var fs = new DisposableFileSystem()) | ||
| 287 | { | ||
| 288 | var baseFolder = fs.GetFolder(); | ||
| 289 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
| 290 | var bundlePath = Path.Combine(baseFolder, @"bin\test.exe"); | ||
| 291 | var baFolderPath = Path.Combine(baseFolder, "ba"); | ||
| 292 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | ||
| 293 | |||
| 294 | var result = WixRunner.Execute(false, new[] | ||
| 295 | { | ||
| 296 | "build", | ||
| 297 | Path.Combine(folder, "SharedPayloadsBetweenPackages", "SharedPayloadsBetweenPackages.wxs"), | ||
| 298 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
| 299 | "-bindpath", Path.Combine(folder, ".Data"), | ||
| 300 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
| 301 | "-intermediateFolder", intermediateFolder, | ||
| 302 | "-o", bundlePath | ||
| 303 | }); | ||
| 304 | |||
| 305 | result.AssertSuccess(); | ||
| 306 | |||
| 307 | Assert.True(File.Exists(bundlePath)); | ||
| 308 | |||
| 309 | var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); | ||
| 310 | extractResult.AssertSuccess(); | ||
| 311 | |||
| 312 | var exePackageElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:ExePackage"); | ||
| 313 | var ignoreAttributesByElementName = new Dictionary<string, List<string>> | ||
| 314 | { | ||
| 315 | { "ExePackage", new List<string> { "CacheId", "InstallSize", "Size" } }, | ||
| 316 | }; | ||
| 317 | Assert.Equal(2, exePackageElements.Count); | ||
| 318 | Assert.Equal("<ExePackage Id='credwiz.exe' Cache='yes' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='yes' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' LogPathVariable='WixBundleLog_credwiz.exe' RollbackLogPathVariable='WixBundleRollbackLog_credwiz.exe' DetectCondition='' InstallArguments='' UninstallArguments='' RepairArguments='' Repairable='no'><PayloadRef Id='credwiz.exe' /><PayloadRef Id='payue_e5DuhsDGlzJxWYPhqr6S7rkc' /></ExePackage>", exePackageElements[0].GetTestXml(ignoreAttributesByElementName)); | ||
| 319 | Assert.Equal("<ExePackage Id='cscript.exe' Cache='yes' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='yes' Vital='yes' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_cscript.exe' RollbackLogPathVariable='WixBundleRollbackLog_cscript.exe' DetectCondition='' InstallArguments='' UninstallArguments='' RepairArguments='' Repairable='no'><PayloadRef Id='cscript.exe' /><PayloadRef Id='payue_e5DuhsDGlzJxWYPhqr6S7rkc' /></ExePackage>", exePackageElements[1].GetTestXml(ignoreAttributesByElementName)); | ||
| 320 | } | ||
| 321 | } | ||
| 322 | |||
| 194 | [Fact] | 323 | [Fact] |
| 195 | public void PopulatesManifestWithSetVariables() | 324 | public void PopulatesManifestWithSetVariables() |
| 196 | { | 325 | { |
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/CustomPackageDescription/CustomPackageDescription.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomPackageDescription/CustomPackageDescription.wxs new file mode 100644 index 00000000..db8b05f2 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/CustomPackageDescription/CustomPackageDescription.wxs | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | ||
| 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
| 3 | <Fragment> | ||
| 4 | <PackageGroup Id="BundlePackages"> | ||
| 5 | <ExePackage SourceFile="burn.exe" Permanent="yes" /> | ||
| 6 | <ExePackage Id="RemotePayloadExe" Name="fake.exe" Compressed="no" DownloadUrl="example.com" Description="Override RemotePayload description" DisplayName="Override RemotePayload display name" Permanent="yes"> | ||
| 7 | <RemotePayload Description="RemotePayload description" Hash="a" ProductName="RemotePayload product name" Size="1" Version="1.0.0.0" /> | ||
| 8 | </ExePackage> | ||
| 9 | <ExePackage SourceFile="C:\Windows\system32\calc.exe" Permanent="yes" Description="Override harvested description" DisplayName="Override harvested display name" /> | ||
| 10 | </PackageGroup> | ||
| 11 | </Fragment> | ||
| 12 | </Wix> | ||
diff --git a/src/test/WixToolsetTest.CoreIntegration/TestData/SharedPayloadsBetweenPackages/SharedPayloadsBetweenPackages.wxs b/src/test/WixToolsetTest.CoreIntegration/TestData/SharedPayloadsBetweenPackages/SharedPayloadsBetweenPackages.wxs new file mode 100644 index 00000000..2588ffc1 --- /dev/null +++ b/src/test/WixToolsetTest.CoreIntegration/TestData/SharedPayloadsBetweenPackages/SharedPayloadsBetweenPackages.wxs | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | ||
| 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"> | ||
| 3 | <Fragment> | ||
| 4 | <PackageGroup Id="BundlePackages"> | ||
| 5 | <ExePackage SourceFile="C:\Windows\system32\credwiz.exe" Permanent="yes"> | ||
| 6 | <PayloadGroupRef Id="SharedPayloads" /> | ||
| 7 | </ExePackage> | ||
| 8 | <ExePackage SourceFile="C:\Windows\system32\cscript.exe" Permanent="yes"> | ||
| 9 | <PayloadGroupRef Id="SharedPayloads" /> | ||
| 10 | </ExePackage> | ||
| 11 | </PackageGroup> | ||
| 12 | </Fragment> | ||
| 13 | <Fragment> | ||
| 14 | <PayloadGroup Id="SharedPayloads"> | ||
| 15 | <Payload SourceFile="$(sys.SOURCEFILEPATH)" /> | ||
| 16 | </PayloadGroup> | ||
| 17 | </Fragment> | ||
| 18 | </Wix> | ||
