diff options
Diffstat (limited to 'src')
7 files changed, 121 insertions, 4 deletions
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs index d77d9d58..f025a493 100644 --- a/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs +++ b/src/api/wix/WixToolset.Data/Symbols/WixBundlePackageExitCodeSymbol.cs | |||
| @@ -32,7 +32,7 @@ namespace WixToolset.Data.Symbols | |||
| 32 | public enum ExitCodeBehaviorType | 32 | public enum ExitCodeBehaviorType |
| 33 | { | 33 | { |
| 34 | NotSet = -1, | 34 | NotSet = -1, |
| 35 | Success, | 35 | Success = 1, |
| 36 | Error, | 36 | Error, |
| 37 | ScheduleReboot, | 37 | ScheduleReboot, |
| 38 | ForceReboot, | 38 | ForceReboot, |
diff --git a/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs b/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs index dda79aa1..7273918b 100644 --- a/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs +++ b/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs | |||
| @@ -532,7 +532,7 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 532 | 532 | ||
| 533 | if (exitCode.Code.HasValue) | 533 | if (exitCode.Code.HasValue) |
| 534 | { | 534 | { |
| 535 | writer.WriteAttributeString("Code", unchecked((uint)exitCode.Code).ToString(CultureInfo.InvariantCulture)); | 535 | writer.WriteAttributeString("Code", exitCode.Code.Value.ToString(CultureInfo.InvariantCulture)); |
| 536 | } | 536 | } |
| 537 | else | 537 | else |
| 538 | { | 538 | { |
diff --git a/src/wix/WixToolset.Core/Common.cs b/src/wix/WixToolset.Core/Common.cs index 89cfe515..c838463d 100644 --- a/src/wix/WixToolset.Core/Common.cs +++ b/src/wix/WixToolset.Core/Common.cs | |||
| @@ -681,6 +681,33 @@ namespace WixToolset.Core | |||
| 681 | } | 681 | } |
| 682 | 682 | ||
| 683 | /// <summary> | 683 | /// <summary> |
| 684 | /// Get an integer attribute value and displays an error for an illegal integer value. | ||
| 685 | /// </summary> | ||
| 686 | /// <param name="messaging"></param> | ||
| 687 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 688 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 689 | /// <returns>The attribute's integer value or null if an error occurred during conversion.</returns> | ||
| 690 | public static int? GetAttributeRawIntegerValue(IMessaging messaging, SourceLineNumber sourceLineNumbers, XAttribute attribute) | ||
| 691 | { | ||
| 692 | var value = Common.GetAttributeValue(messaging, sourceLineNumbers, attribute, EmptyRule.MustHaveNonWhitespaceCharacters); | ||
| 693 | int? integer = null; | ||
| 694 | |||
| 695 | if (0 < value.Length) | ||
| 696 | { | ||
| 697 | if (Int32.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture.NumberFormat, out var integerValue)) | ||
| 698 | { | ||
| 699 | integer = integerValue; | ||
| 700 | } | ||
| 701 | else | ||
| 702 | { | ||
| 703 | messaging.Write(ErrorMessages.IllegalIntegerValue(sourceLineNumbers, attribute.Parent.Name.LocalName, attribute.Name.LocalName, value)); | ||
| 704 | } | ||
| 705 | } | ||
| 706 | |||
| 707 | return integer; | ||
| 708 | } | ||
| 709 | |||
| 710 | /// <summary> | ||
| 684 | /// Gets a yes/no value and displays an error for an illegal yes/no value. | 711 | /// Gets a yes/no value and displays an error for an illegal yes/no value. |
| 685 | /// </summary> | 712 | /// </summary> |
| 686 | /// <param name="messaging"></param> | 713 | /// <param name="messaging"></param> |
diff --git a/src/wix/WixToolset.Core/CompilerCore.cs b/src/wix/WixToolset.Core/CompilerCore.cs index cbb8f1f0..c03305f0 100644 --- a/src/wix/WixToolset.Core/CompilerCore.cs +++ b/src/wix/WixToolset.Core/CompilerCore.cs | |||
| @@ -501,6 +501,17 @@ namespace WixToolset.Core | |||
| 501 | } | 501 | } |
| 502 | 502 | ||
| 503 | /// <summary> | 503 | /// <summary> |
| 504 | /// Get an integer attribute value and displays an error for an illegal integer value. | ||
| 505 | /// </summary> | ||
| 506 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | ||
| 507 | /// <param name="attribute">The attribute containing the value to get.</param> | ||
| 508 | /// <returns>The attribute's integer value or null if an error occurred during conversion.</returns> | ||
| 509 | public int? GetAttributeRawIntegerValue(SourceLineNumber sourceLineNumbers, XAttribute attribute) | ||
| 510 | { | ||
| 511 | return Common.GetAttributeRawIntegerValue(this.messaging, sourceLineNumbers, attribute); | ||
| 512 | } | ||
| 513 | |||
| 514 | /// <summary> | ||
| 504 | /// Get a long integral attribute value and displays an error for an illegal long value. | 515 | /// Get a long integral attribute value and displays an error for an illegal long value. |
| 505 | /// </summary> | 516 | /// </summary> |
| 506 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> | 517 | /// <param name="sourceLineNumbers">Source line information about the owner element.</param> |
diff --git a/src/wix/WixToolset.Core/Compiler_Bundle.cs b/src/wix/WixToolset.Core/Compiler_Bundle.cs index 47eb646b..0a1e416f 100644 --- a/src/wix/WixToolset.Core/Compiler_Bundle.cs +++ b/src/wix/WixToolset.Core/Compiler_Bundle.cs | |||
| @@ -1609,7 +1609,7 @@ namespace WixToolset.Core | |||
| 1609 | private void ParseExitCodeElement(XElement node, string packageId) | 1609 | private void ParseExitCodeElement(XElement node, string packageId) |
| 1610 | { | 1610 | { |
| 1611 | var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); | 1611 | var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); |
| 1612 | var value = CompilerConstants.IntegerNotSet; | 1612 | int? value = null; |
| 1613 | var behavior = ExitCodeBehaviorType.NotSet; | 1613 | var behavior = ExitCodeBehaviorType.NotSet; |
| 1614 | 1614 | ||
| 1615 | foreach (var attrib in node.Attributes()) | 1615 | foreach (var attrib in node.Attributes()) |
| @@ -1619,7 +1619,7 @@ namespace WixToolset.Core | |||
| 1619 | switch (attrib.Name.LocalName) | 1619 | switch (attrib.Name.LocalName) |
| 1620 | { | 1620 | { |
| 1621 | case "Value": | 1621 | case "Value": |
| 1622 | value = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, Int32.MinValue + 2, Int32.MaxValue); | 1622 | value = this.Core.GetAttributeRawIntegerValue(sourceLineNumbers, attrib); |
| 1623 | break; | 1623 | break; |
| 1624 | case "Behavior": | 1624 | case "Behavior": |
| 1625 | var behaviorString = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 1625 | var behaviorString = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs index 882a7861..a3ca2917 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/ExePackageFixture.cs | |||
| @@ -55,6 +55,60 @@ namespace WixToolsetTest.CoreIntegration | |||
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | [Fact] | 57 | [Fact] |
| 58 | public void CanBuildWithCustomExitCodes() | ||
| 59 | { | ||
| 60 | var folder = TestData.Get(@"TestData"); | ||
| 61 | |||
| 62 | using (var fs = new DisposableFileSystem()) | ||
| 63 | { | ||
| 64 | var baseFolder = fs.GetFolder(); | ||
| 65 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
| 66 | var binFolder = Path.Combine(baseFolder, "bin"); | ||
| 67 | var bundlePath = Path.Combine(binFolder, "test.exe"); | ||
| 68 | var baFolderPath = Path.Combine(baseFolder, "ba"); | ||
| 69 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | ||
| 70 | |||
| 71 | var result = WixRunner.Execute(new[] | ||
| 72 | { | ||
| 73 | "build", | ||
| 74 | Path.Combine(folder, "ExePackage", "CustomExitCodes.wxs"), | ||
| 75 | Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"), | ||
| 76 | "-bindpath", Path.Combine(folder, "SimpleBundle", "data"), | ||
| 77 | "-bindpath", Path.Combine(folder, ".Data"), | ||
| 78 | "-intermediateFolder", intermediateFolder, | ||
| 79 | "-o", bundlePath, | ||
| 80 | }); | ||
| 81 | |||
| 82 | result.AssertSuccess(); | ||
| 83 | |||
| 84 | Assert.True(File.Exists(bundlePath)); | ||
| 85 | |||
| 86 | var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath); | ||
| 87 | extractResult.AssertSuccess(); | ||
| 88 | |||
| 89 | var exePackages = extractResult.GetManifestTestXmlLines("/burn:BurnManifest/burn:Chain/burn:ExePackage"); | ||
| 90 | WixAssert.CompareLineByLine(new string[] | ||
| 91 | { | ||
| 92 | "<ExePackage Id='burn.exe' Cache='keep' CacheId='F6E722518AC3AB7E31C70099368D5770788C179AA23226110DCF07319B1E1964' InstallSize='463360' Size='463360' PerMachine='yes' Permanent='no' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_burn.exe' RollbackLogPathVariable='WixBundleRollbackLog_burn.exe' InstallArguments='-install' RepairArguments='-repair' Repairable='yes' DetectionType='condition' DetectCondition='detect' UninstallArguments='-uninstall' Uninstallable='yes'>" + | ||
| 93 | "<ExitCode Code='0' Type='2' />" + | ||
| 94 | "<ExitCode Code='3' Type='3' />" + | ||
| 95 | "<ExitCode Code='4' Type='4' />" + | ||
| 96 | "<ExitCode Code='3010' Type='2' />" + | ||
| 97 | "<ExitCode Code='-2147021886' Type='2' />" + | ||
| 98 | "<ExitCode Code='3011' Type='2' />" + | ||
| 99 | "<ExitCode Code='-2147021885' Type='2' />" + | ||
| 100 | "<ExitCode Code='1641' Type='2' />" + | ||
| 101 | "<ExitCode Code='-2147023255' Type='2' />" + | ||
| 102 | "<ExitCode Code='-2147483647' Type='2' />" + | ||
| 103 | "<ExitCode Code='-2147483648' Type='2' />" + | ||
| 104 | "<ExitCode Code='*' Type='1' />" + | ||
| 105 | "<PayloadRef Id='burn.exe' />" + | ||
| 106 | "</ExePackage>", | ||
| 107 | }, exePackages); | ||
| 108 | } | ||
| 109 | } | ||
| 110 | |||
| 111 | [Fact] | ||
| 58 | public void WarningWhenInvalidArpEntryVersion() | 112 | public void WarningWhenInvalidArpEntryVersion() |
| 59 | { | 113 | { |
| 60 | var folder = TestData.Get(@"TestData"); | 114 | var folder = TestData.Get(@"TestData"); |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/ExePackage/CustomExitCodes.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/ExePackage/CustomExitCodes.wxs new file mode 100644 index 00000000..9cbc9919 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/ExePackage/CustomExitCodes.wxs | |||
| @@ -0,0 +1,25 @@ | |||
| 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 InstallArguments="-install" | ||
| 6 | RepairArguments="-repair" | ||
| 7 | UninstallArguments="-uninstall" | ||
| 8 | DetectCondition="detect" | ||
| 9 | SourceFile="burn.exe"> | ||
| 10 | <ExitCode Value="0" Behavior="error" /> | ||
| 11 | <ExitCode Value="3" Behavior="scheduleReboot" /> | ||
| 12 | <ExitCode Value="4" Behavior="forceReboot" /> | ||
| 13 | <ExitCode Value="3010" Behavior="error" /> | ||
| 14 | <ExitCode Value="-2147021886" Behavior="error" /> | ||
| 15 | <ExitCode Value="3011" Behavior="error" /> | ||
| 16 | <ExitCode Value="-2147021885" Behavior="error" /> | ||
| 17 | <ExitCode Value="1641" Behavior="error" /> | ||
| 18 | <ExitCode Value="-2147023255" Behavior="error" /> | ||
| 19 | <ExitCode Value="-2147483647" Behavior="error" /> | ||
| 20 | <ExitCode Value="-2147483648" Behavior="error" /> | ||
| 21 | <ExitCode Behavior="success" /> | ||
| 22 | </ExePackage> | ||
| 23 | </PackageGroup> | ||
| 24 | </Fragment> | ||
| 25 | </Wix> | ||
