diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-07-01 09:30:10 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-07-02 12:50:09 -0500 |
| commit | 9bdf3730cd43e1af8a4ea9be6cf2fba77fcff2d2 (patch) | |
| tree | ea2a05de5a8a1dfcb2af8e9e3805fe015729f66a /src | |
| parent | 8cbfc326cccf8d9b3b63cb6f752fc770f7dee0fc (diff) | |
| download | wix-9bdf3730cd43e1af8a4ea9be6cf2fba77fcff2d2.tar.gz wix-9bdf3730cd43e1af8a4ea9be6cf2fba77fcff2d2.tar.bz2 wix-9bdf3730cd43e1af8a4ea9be6cf2fba77fcff2d2.zip | |
Add bundle option for command line variables to always be uppercase.
Fixes #3777
Diffstat (limited to 'src')
32 files changed, 454 insertions, 13 deletions
diff --git a/src/api/burn/WixToolset.Mba.Core/IOverridableVariables.cs b/src/api/burn/WixToolset.Mba.Core/IOverridableVariables.cs index 3944913b..1ffe50e4 100644 --- a/src/api/burn/WixToolset.Mba.Core/IOverridableVariables.cs +++ b/src/api/burn/WixToolset.Mba.Core/IOverridableVariables.cs | |||
| @@ -5,11 +5,31 @@ namespace WixToolset.Mba.Core | |||
| 5 | using System.Collections.Generic; | 5 | using System.Collections.Generic; |
| 6 | 6 | ||
| 7 | /// <summary> | 7 | /// <summary> |
| 8 | /// The case sensitivity of variables from the command line. | ||
| 9 | /// </summary> | ||
| 10 | public enum VariableCommandLineType | ||
| 11 | { | ||
| 12 | /// <summary> | ||
| 13 | /// Similar to Windows Installer, all variable names specified on the command line are automatically converted to upper case. | ||
| 14 | /// </summary> | ||
| 15 | UpperCase, | ||
| 16 | /// <summary> | ||
| 17 | /// All variable names specified on the command line must match the case specified when building the bundle. | ||
| 18 | /// </summary> | ||
| 19 | CaseSensitive, | ||
| 20 | } | ||
| 21 | |||
| 22 | /// <summary> | ||
| 8 | /// Overridable variable information from the BA manifest. | 23 | /// Overridable variable information from the BA manifest. |
| 9 | /// </summary> | 24 | /// </summary> |
| 10 | public interface IOverridableVariables | 25 | public interface IOverridableVariables |
| 11 | { | 26 | { |
| 12 | /// <summary> | 27 | /// <summary> |
| 28 | /// The <see cref="VariableCommandLineType"/> of the bundle. | ||
| 29 | /// </summary> | ||
| 30 | VariableCommandLineType CommandLineType { get; } | ||
| 31 | |||
| 32 | /// <summary> | ||
| 13 | /// Variable Dictionary of variable name to <see cref="IOverridableVariableInfo"/>. | 33 | /// Variable Dictionary of variable name to <see cref="IOverridableVariableInfo"/>. |
| 14 | /// </summary> | 34 | /// </summary> |
| 15 | IDictionary<string, IOverridableVariableInfo> Variables { get; } | 35 | IDictionary<string, IOverridableVariableInfo> Variables { get; } |
diff --git a/src/api/burn/WixToolset.Mba.Core/MbaCommand.cs b/src/api/burn/WixToolset.Mba.Core/MbaCommand.cs index e7e49607..424cde63 100644 --- a/src/api/burn/WixToolset.Mba.Core/MbaCommand.cs +++ b/src/api/burn/WixToolset.Mba.Core/MbaCommand.cs | |||
| @@ -19,9 +19,11 @@ namespace WixToolset.Mba.Core | |||
| 19 | { | 19 | { |
| 20 | foreach (var kvp in this.Variables) | 20 | foreach (var kvp in this.Variables) |
| 21 | { | 21 | { |
| 22 | if (!overridableVariables.Variables.TryGetValue(kvp.Key, out var overridableVariable)) | 22 | var key = overridableVariables.CommandLineType == VariableCommandLineType.UpperCase ? kvp.Key.ToUpperInvariant() : kvp.Key; |
| 23 | |||
| 24 | if (!overridableVariables.Variables.TryGetValue(key, out var overridableVariable)) | ||
| 23 | { | 25 | { |
| 24 | engine.Log(LogLevel.Error, string.Format("Ignoring attempt to set non-overridable variable: '{0}'.", kvp.Key)); | 26 | engine.Log(LogLevel.Error, string.Format("Ignoring attempt to set non-overridable variable: '{0}'.", key)); |
| 25 | } | 27 | } |
| 26 | else | 28 | else |
| 27 | { | 29 | { |
diff --git a/src/api/burn/WixToolset.Mba.Core/OverridableVariables.cs b/src/api/burn/WixToolset.Mba.Core/OverridableVariables.cs index 855ce9a9..148acb34 100644 --- a/src/api/burn/WixToolset.Mba.Core/OverridableVariables.cs +++ b/src/api/burn/WixToolset.Mba.Core/OverridableVariables.cs | |||
| @@ -13,6 +13,9 @@ namespace WixToolset.Mba.Core | |||
| 13 | public class OverridableVariablesInfo : IOverridableVariables | 13 | public class OverridableVariablesInfo : IOverridableVariables |
| 14 | { | 14 | { |
| 15 | /// <inheritdoc /> | 15 | /// <inheritdoc /> |
| 16 | public VariableCommandLineType CommandLineType { get; internal set; } | ||
| 17 | |||
| 18 | /// <inheritdoc /> | ||
| 16 | public IDictionary<string, IOverridableVariableInfo> Variables { get; internal set; } | 19 | public IDictionary<string, IOverridableVariableInfo> Variables { get; internal set; } |
| 17 | 20 | ||
| 18 | internal OverridableVariablesInfo() { } | 21 | internal OverridableVariablesInfo() { } |
| @@ -26,9 +29,36 @@ namespace WixToolset.Mba.Core | |||
| 26 | { | 29 | { |
| 27 | XmlNamespaceManager namespaceManager = new XmlNamespaceManager(root.NameTable); | 30 | XmlNamespaceManager namespaceManager = new XmlNamespaceManager(root.NameTable); |
| 28 | namespaceManager.AddNamespace("p", BootstrapperApplicationData.XMLNamespace); | 31 | namespaceManager.AddNamespace("p", BootstrapperApplicationData.XMLNamespace); |
| 32 | XPathNavigator commandLineNode = root.SelectSingleNode("/p:BootstrapperApplicationData/p:CommandLine", namespaceManager); | ||
| 29 | XPathNodeIterator nodes = root.Select("/p:BootstrapperApplicationData/p:WixStdbaOverridableVariable", namespaceManager); | 33 | XPathNodeIterator nodes = root.Select("/p:BootstrapperApplicationData/p:WixStdbaOverridableVariable", namespaceManager); |
| 30 | 34 | ||
| 31 | var overridableVariables = new OverridableVariablesInfo(); | 35 | var overridableVariables = new OverridableVariablesInfo(); |
| 36 | |||
| 37 | if (commandLineNode == null) | ||
| 38 | { | ||
| 39 | throw new Exception("Failed to select command line information."); | ||
| 40 | } | ||
| 41 | |||
| 42 | string variablesValue = BootstrapperApplicationData.GetAttribute(commandLineNode, "Variables"); | ||
| 43 | |||
| 44 | if (variablesValue == null) | ||
| 45 | { | ||
| 46 | throw new Exception("Failed to get command line variable type."); | ||
| 47 | } | ||
| 48 | |||
| 49 | if (variablesValue.Equals("upperCase", StringComparison.InvariantCulture)) | ||
| 50 | { | ||
| 51 | overridableVariables.CommandLineType = VariableCommandLineType.UpperCase; | ||
| 52 | } | ||
| 53 | else if (variablesValue.Equals("caseSensitive", StringComparison.InvariantCulture)) | ||
| 54 | { | ||
| 55 | overridableVariables.CommandLineType = VariableCommandLineType.CaseSensitive; | ||
| 56 | } | ||
| 57 | else | ||
| 58 | { | ||
| 59 | throw new Exception(string.Format("Unknown command line variable type: '{0}'", variablesValue)); | ||
| 60 | } | ||
| 61 | |||
| 32 | overridableVariables.Variables = new Dictionary<string, IOverridableVariableInfo>(); | 62 | overridableVariables.Variables = new Dictionary<string, IOverridableVariableInfo>(); |
| 33 | 63 | ||
| 34 | foreach (XPathNavigator node in nodes) | 64 | foreach (XPathNavigator node in nodes) |
diff --git a/src/api/burn/balutil/balinfo.cpp b/src/api/burn/balutil/balinfo.cpp index 5927ef72..f71784a5 100644 --- a/src/api/burn/balutil/balinfo.cpp +++ b/src/api/burn/balutil/balinfo.cpp | |||
| @@ -292,6 +292,7 @@ DAPI_(HRESULT) BalSetOverridableVariablesFromEngine( | |||
| 292 | ) | 292 | ) |
| 293 | { | 293 | { |
| 294 | HRESULT hr = S_OK; | 294 | HRESULT hr = S_OK; |
| 295 | LPWSTR sczKey = NULL; | ||
| 295 | BAL_INFO_OVERRIDABLE_VARIABLE* pOverridableVariable = NULL; | 296 | BAL_INFO_OVERRIDABLE_VARIABLE* pOverridableVariable = NULL; |
| 296 | 297 | ||
| 297 | for (DWORD i = 0; i < pCommand->cVariables; ++i) | 298 | for (DWORD i = 0; i < pCommand->cVariables; ++i) |
| @@ -299,6 +300,14 @@ DAPI_(HRESULT) BalSetOverridableVariablesFromEngine( | |||
| 299 | LPCWSTR wzVariableName = pCommand->rgVariableNames[i]; | 300 | LPCWSTR wzVariableName = pCommand->rgVariableNames[i]; |
| 300 | LPCWSTR wzVariableValue = pCommand->rgVariableValues[i]; | 301 | LPCWSTR wzVariableValue = pCommand->rgVariableValues[i]; |
| 301 | 302 | ||
| 303 | if (BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE == pOverridableVariables->commandLineType) | ||
| 304 | { | ||
| 305 | hr = StrAllocStringToUpperInvariant(&sczKey, wzVariableName, 0); | ||
| 306 | ExitOnFailure(hr, "Failed to upper case variable name."); | ||
| 307 | |||
| 308 | wzVariableName = sczKey; | ||
| 309 | } | ||
| 310 | |||
| 302 | hr = DictGetValue(pOverridableVariables->sdVariables, wzVariableName, reinterpret_cast<void**>(&pOverridableVariable)); | 311 | hr = DictGetValue(pOverridableVariables->sdVariables, wzVariableName, reinterpret_cast<void**>(&pOverridableVariable)); |
| 303 | if (E_NOTFOUND == hr) | 312 | if (E_NOTFOUND == hr) |
| 304 | { | 313 | { |
| @@ -313,6 +322,8 @@ DAPI_(HRESULT) BalSetOverridableVariablesFromEngine( | |||
| 313 | } | 322 | } |
| 314 | 323 | ||
| 315 | LExit: | 324 | LExit: |
| 325 | ReleaseStr(sczKey); | ||
| 326 | |||
| 316 | return hr; | 327 | return hr; |
| 317 | } | 328 | } |
| 318 | 329 | ||
| @@ -527,10 +538,37 @@ static HRESULT ParseOverridableVariablesFromXml( | |||
| 527 | ) | 538 | ) |
| 528 | { | 539 | { |
| 529 | HRESULT hr = S_OK; | 540 | HRESULT hr = S_OK; |
| 541 | IXMLDOMNode* pCommandLineNode = NULL; | ||
| 542 | LPWSTR scz = NULL; | ||
| 530 | IXMLDOMNode* pNode = NULL; | 543 | IXMLDOMNode* pNode = NULL; |
| 531 | IXMLDOMNodeList* pNodes = NULL; | 544 | IXMLDOMNodeList* pNodes = NULL; |
| 532 | BAL_INFO_OVERRIDABLE_VARIABLE* pOverridableVariable = NULL; | 545 | BAL_INFO_OVERRIDABLE_VARIABLE* pOverridableVariable = NULL; |
| 533 | 546 | ||
| 547 | hr = XmlSelectSingleNode(pixdManifest, L"/BootstrapperApplicationData/CommandLine", &pCommandLineNode); | ||
| 548 | if (S_FALSE == hr) | ||
| 549 | { | ||
| 550 | hr = E_NOTFOUND; | ||
| 551 | } | ||
| 552 | ExitOnFailure(hr, "Failed to select command line information."); | ||
| 553 | |||
| 554 | // @Variables | ||
| 555 | hr = XmlGetAttributeEx(pCommandLineNode, L"Variables", &scz); | ||
| 556 | ExitOnFailure(hr, "Failed to get command line variable type."); | ||
| 557 | |||
| 558 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"upperCase", -1)) | ||
| 559 | { | ||
| 560 | pOverridableVariables->commandLineType = BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE; | ||
| 561 | } | ||
| 562 | else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"caseSensitive", -1)) | ||
| 563 | { | ||
| 564 | pOverridableVariables->commandLineType = BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_CASE_SENSITIVE; | ||
| 565 | } | ||
| 566 | else | ||
| 567 | { | ||
| 568 | hr = E_INVALIDARG; | ||
| 569 | ExitOnFailure(hr, "Invalid value for CommandLine/@Variables: %ls", scz); | ||
| 570 | } | ||
| 571 | |||
| 534 | // Get the list of variables users can override on the command line. | 572 | // Get the list of variables users can override on the command line. |
| 535 | hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixStdbaOverridableVariable", &pNodes); | 573 | hr = XmlSelectNodes(pixdManifest, L"/BootstrapperApplicationData/WixStdbaOverridableVariable", &pNodes); |
| 536 | if (S_FALSE == hr) | 574 | if (S_FALSE == hr) |
| @@ -570,6 +608,8 @@ static HRESULT ParseOverridableVariablesFromXml( | |||
| 570 | } | 608 | } |
| 571 | 609 | ||
| 572 | LExit: | 610 | LExit: |
| 611 | ReleaseStr(scz); | ||
| 612 | ReleaseObject(pCommandLineNode); | ||
| 573 | ReleaseObject(pNode); | 613 | ReleaseObject(pNode); |
| 574 | ReleaseObject(pNodes); | 614 | ReleaseObject(pNodes); |
| 575 | return hr; | 615 | return hr; |
diff --git a/src/api/burn/balutil/inc/balinfo.h b/src/api/burn/balutil/inc/balinfo.h index 0fce35ec..07a1cbb7 100644 --- a/src/api/burn/balutil/inc/balinfo.h +++ b/src/api/burn/balutil/inc/balinfo.h | |||
| @@ -18,6 +18,12 @@ typedef enum BAL_INFO_PACKAGE_TYPE | |||
| 18 | BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH, | 18 | BAL_INFO_PACKAGE_TYPE_BUNDLE_PATCH, |
| 19 | } BAL_INFO_PACKAGE_TYPE; | 19 | } BAL_INFO_PACKAGE_TYPE; |
| 20 | 20 | ||
| 21 | typedef enum _BAL_INFO_VARIABLE_COMMAND_LINE_TYPE | ||
| 22 | { | ||
| 23 | BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE, | ||
| 24 | BAL_INFO_VARIABLE_COMMAND_LINE_TYPE_CASE_SENSITIVE, | ||
| 25 | } BAL_INFO_VARIABLE_COMMAND_LINE_TYPE; | ||
| 26 | |||
| 21 | 27 | ||
| 22 | typedef struct _BAL_INFO_PACKAGE | 28 | typedef struct _BAL_INFO_PACKAGE |
| 23 | { | 29 | { |
| @@ -58,6 +64,7 @@ typedef struct _BAL_INFO_OVERRIDABLE_VARIABLES | |||
| 58 | BAL_INFO_OVERRIDABLE_VARIABLE* rgVariables; | 64 | BAL_INFO_OVERRIDABLE_VARIABLE* rgVariables; |
| 59 | DWORD cVariables; | 65 | DWORD cVariables; |
| 60 | STRINGDICT_HANDLE sdVariables; | 66 | STRINGDICT_HANDLE sdVariables; |
| 67 | BAL_INFO_VARIABLE_COMMAND_LINE_TYPE commandLineType; | ||
| 61 | } BAL_INFO_OVERRIDABLE_VARIABLES; | 68 | } BAL_INFO_OVERRIDABLE_VARIABLES; |
| 62 | 69 | ||
| 63 | 70 | ||
diff --git a/src/api/burn/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.csproj b/src/api/burn/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.csproj index bdb6a829..8d68546f 100644 --- a/src/api/burn/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.csproj +++ b/src/api/burn/test/WixToolsetTest.Mba.Core/WixToolsetTest.Mba.Core.csproj | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | </ItemGroup> | 14 | </ItemGroup> |
| 15 | 15 | ||
| 16 | <ItemGroup> | 16 | <ItemGroup> |
| 17 | <PackageReference Include="Microsoft.NET.Test.Sdk" /> | ||
| 17 | <PackageReference Include="xunit" /> | 18 | <PackageReference Include="xunit" /> |
| 18 | <PackageReference Include="xunit.runner.visualstudio" PrivateAssets="All" /> | 19 | <PackageReference Include="xunit.runner.visualstudio" PrivateAssets="All" /> |
| 19 | </ItemGroup> | 20 | </ItemGroup> |
diff --git a/src/api/wix/WixToolset.Data/Symbols/WixBundleSymbol.cs b/src/api/wix/WixToolset.Data/Symbols/WixBundleSymbol.cs index 9724cbd7..de5646d3 100644 --- a/src/api/wix/WixToolset.Data/Symbols/WixBundleSymbol.cs +++ b/src/api/wix/WixToolset.Data/Symbols/WixBundleSymbol.cs | |||
| @@ -33,6 +33,7 @@ namespace WixToolset.Data | |||
| 33 | new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.BundleId), IntermediateFieldType.String), | 33 | new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.BundleId), IntermediateFieldType.String), |
| 34 | new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.ProviderKey), IntermediateFieldType.String), | 34 | new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.ProviderKey), IntermediateFieldType.String), |
| 35 | new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.InProgressName), IntermediateFieldType.String), | 35 | new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.InProgressName), IntermediateFieldType.String), |
| 36 | new IntermediateFieldDefinition(nameof(WixBundleSymbolFields.CommandLineVariables), IntermediateFieldType.String), | ||
| 36 | }, | 37 | }, |
| 37 | typeof(WixBundleSymbol)); | 38 | typeof(WixBundleSymbol)); |
| 38 | } | 39 | } |
| @@ -67,6 +68,7 @@ namespace WixToolset.Data.Symbols | |||
| 67 | BundleId, | 68 | BundleId, |
| 68 | ProviderKey, | 69 | ProviderKey, |
| 69 | InProgressName, | 70 | InProgressName, |
| 71 | CommandLineVariables, | ||
| 70 | } | 72 | } |
| 71 | 73 | ||
| 72 | [Flags] | 74 | [Flags] |
| @@ -79,6 +81,12 @@ namespace WixToolset.Data.Symbols | |||
| 79 | PerMachine = 0x8, | 81 | PerMachine = 0x8, |
| 80 | } | 82 | } |
| 81 | 83 | ||
| 84 | public enum WixBundleCommandLineVariables | ||
| 85 | { | ||
| 86 | UpperCase, | ||
| 87 | CaseSensitive, | ||
| 88 | } | ||
| 89 | |||
| 82 | public class WixBundleSymbol : IntermediateSymbol | 90 | public class WixBundleSymbol : IntermediateSymbol |
| 83 | { | 91 | { |
| 84 | public WixBundleSymbol() : base(SymbolDefinitions.WixBundle, null, null) | 92 | public WixBundleSymbol() : base(SymbolDefinitions.WixBundle, null, null) |
| @@ -229,6 +237,12 @@ namespace WixToolset.Data.Symbols | |||
| 229 | set => this.Set((int)WixBundleSymbolFields.InProgressName, value); | 237 | set => this.Set((int)WixBundleSymbolFields.InProgressName, value); |
| 230 | } | 238 | } |
| 231 | 239 | ||
| 240 | public WixBundleCommandLineVariables CommandLineVariables | ||
| 241 | { | ||
| 242 | get => (WixBundleCommandLineVariables)this.Fields[(int)WixBundleSymbolFields.CommandLineVariables].AsNumber(); | ||
| 243 | set => this.Set((int)WixBundleSymbolFields.CommandLineVariables, (int)value); | ||
| 244 | } | ||
| 245 | |||
| 232 | public PackagingType DefaultPackagingType => (this.Compressed.HasValue && !this.Compressed.Value) ? PackagingType.External : PackagingType.Embedded; | 246 | public PackagingType DefaultPackagingType => (this.Compressed.HasValue && !this.Compressed.Value) ? PackagingType.External : PackagingType.Embedded; |
| 233 | 247 | ||
| 234 | public bool DisableModify => (this.Attributes & WixBundleAttributes.DisableModify) == WixBundleAttributes.DisableModify; | 248 | public bool DisableModify => (this.Attributes & WixBundleAttributes.DisableModify) == WixBundleAttributes.DisableModify; |
diff --git a/src/burn/engine/core.cpp b/src/burn/engine/core.cpp index ca613dc5..8b97952c 100644 --- a/src/burn/engine/core.cpp +++ b/src/burn/engine/core.cpp | |||
| @@ -1699,7 +1699,14 @@ static HRESULT GetSanitizedCommandLine( | |||
| 1699 | const wchar_t* pwc = wcschr(argv[i], L'='); | 1699 | const wchar_t* pwc = wcschr(argv[i], L'='); |
| 1700 | if (pwc) | 1700 | if (pwc) |
| 1701 | { | 1701 | { |
| 1702 | hr = StrAllocString(&sczVariableName, argv[i], pwc - argv[i]); | 1702 | if (BURN_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE == pVariables->commandLineType) |
| 1703 | { | ||
| 1704 | hr = StrAllocStringToUpperInvariant(&sczVariableName, argv[i], pwc - argv[i]); | ||
| 1705 | } | ||
| 1706 | else | ||
| 1707 | { | ||
| 1708 | hr = StrAllocString(&sczVariableName, argv[i], pwc - argv[i]); | ||
| 1709 | } | ||
| 1703 | ExitOnFailure(hr, "Failed to copy variable name."); | 1710 | ExitOnFailure(hr, "Failed to copy variable name."); |
| 1704 | 1711 | ||
| 1705 | hr = VariableIsHidden(pVariables, sczVariableName, &fHidden); | 1712 | hr = VariableIsHidden(pVariables, sczVariableName, &fHidden); |
diff --git a/src/burn/engine/variable.cpp b/src/burn/engine/variable.cpp index 6f818ff3..e2b1f1f2 100644 --- a/src/burn/engine/variable.cpp +++ b/src/burn/engine/variable.cpp | |||
| @@ -294,6 +294,7 @@ extern "C" HRESULT VariablesParseFromXml( | |||
| 294 | ) | 294 | ) |
| 295 | { | 295 | { |
| 296 | HRESULT hr = S_OK; | 296 | HRESULT hr = S_OK; |
| 297 | IXMLDOMNode* pixnCommandLine = NULL; | ||
| 297 | IXMLDOMNodeList* pixnNodes = NULL; | 298 | IXMLDOMNodeList* pixnNodes = NULL; |
| 298 | IXMLDOMNode* pixnNode = NULL; | 299 | IXMLDOMNode* pixnNode = NULL; |
| 299 | DWORD cNodes = 0; | 300 | DWORD cNodes = 0; |
| @@ -307,6 +308,32 @@ extern "C" HRESULT VariablesParseFromXml( | |||
| 307 | 308 | ||
| 308 | ::EnterCriticalSection(&pVariables->csAccess); | 309 | ::EnterCriticalSection(&pVariables->csAccess); |
| 309 | 310 | ||
| 311 | // select registration node | ||
| 312 | hr = XmlSelectSingleNode(pixnBundle, L"CommandLine", &pixnCommandLine); | ||
| 313 | if (S_FALSE == hr) | ||
| 314 | { | ||
| 315 | hr = E_NOTFOUND; | ||
| 316 | } | ||
| 317 | ExitOnFailure(hr, "Failed to select CommandLine node."); | ||
| 318 | |||
| 319 | // @Variables | ||
| 320 | hr = XmlGetAttributeEx(pixnCommandLine, L"Variables", &scz); | ||
| 321 | ExitOnFailure(hr, "Failed to get CommandLine/@Variables."); | ||
| 322 | |||
| 323 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"upperCase", -1)) | ||
| 324 | { | ||
| 325 | pVariables->commandLineType = BURN_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE; | ||
| 326 | } | ||
| 327 | else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"caseSensitive", -1)) | ||
| 328 | { | ||
| 329 | pVariables->commandLineType = BURN_VARIABLE_COMMAND_LINE_TYPE_CASE_SENSITIVE; | ||
| 330 | } | ||
| 331 | else | ||
| 332 | { | ||
| 333 | hr = E_INVALIDARG; | ||
| 334 | ExitOnFailure(hr, "Invalid value for CommandLine/@Variables: %ls", scz); | ||
| 335 | } | ||
| 336 | |||
| 310 | // select variable nodes | 337 | // select variable nodes |
| 311 | hr = XmlSelectNodes(pixnBundle, L"Variable", &pixnNodes); | 338 | hr = XmlSelectNodes(pixnBundle, L"Variable", &pixnNodes); |
| 312 | ExitOnFailure(hr, "Failed to select variable nodes."); | 339 | ExitOnFailure(hr, "Failed to select variable nodes."); |
| @@ -434,6 +461,7 @@ extern "C" HRESULT VariablesParseFromXml( | |||
| 434 | LExit: | 461 | LExit: |
| 435 | ::LeaveCriticalSection(&pVariables->csAccess); | 462 | ::LeaveCriticalSection(&pVariables->csAccess); |
| 436 | 463 | ||
| 464 | ReleaseObject(pixnCommandLine); | ||
| 437 | ReleaseObject(pixnNodes); | 465 | ReleaseObject(pixnNodes); |
| 438 | ReleaseObject(pixnNode); | 466 | ReleaseObject(pixnNode); |
| 439 | ReleaseStr(scz); | 467 | ReleaseStr(scz); |
diff --git a/src/burn/engine/variable.h b/src/burn/engine/variable.h index a38c9daa..9ed86ca7 100644 --- a/src/burn/engine/variable.h +++ b/src/burn/engine/variable.h | |||
| @@ -25,6 +25,12 @@ typedef HRESULT (*PFN_INITIALIZEVARIABLE)( | |||
| 25 | 25 | ||
| 26 | // constants | 26 | // constants |
| 27 | 27 | ||
| 28 | enum BURN_VARIABLE_COMMAND_LINE_TYPE | ||
| 29 | { | ||
| 30 | BURN_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE, | ||
| 31 | BURN_VARIABLE_COMMAND_LINE_TYPE_CASE_SENSITIVE, | ||
| 32 | }; | ||
| 33 | |||
| 28 | enum BURN_VARIABLE_INTERNAL_TYPE | 34 | enum BURN_VARIABLE_INTERNAL_TYPE |
| 29 | { | 35 | { |
| 30 | BURN_VARIABLE_INTERNAL_TYPE_NORMAL, // the BA can set this variable. | 36 | BURN_VARIABLE_INTERNAL_TYPE_NORMAL, // the BA can set this variable. |
| @@ -54,6 +60,7 @@ typedef struct _BURN_VARIABLES | |||
| 54 | DWORD dwMaxVariables; | 60 | DWORD dwMaxVariables; |
| 55 | DWORD cVariables; | 61 | DWORD cVariables; |
| 56 | BURN_VARIABLE* rgVariables; | 62 | BURN_VARIABLE* rgVariables; |
| 63 | BURN_VARIABLE_COMMAND_LINE_TYPE commandLineType; | ||
| 57 | } BURN_VARIABLES; | 64 | } BURN_VARIABLES; |
| 58 | 65 | ||
| 59 | 66 | ||
diff --git a/src/burn/test/BurnUnitTest/ManifestTest.cpp b/src/burn/test/BurnUnitTest/ManifestTest.cpp index 963be156..345ddfd9 100644 --- a/src/burn/test/BurnUnitTest/ManifestTest.cpp +++ b/src/burn/test/BurnUnitTest/ManifestTest.cpp | |||
| @@ -37,6 +37,7 @@ namespace Bootstrapper | |||
| 37 | " <Registration Id='{D54F896D-1952-43e6-9C67-B5652240618C}' Tag='foo' ProviderKey='foo' Version='1.0.0.0' ExecutableName='setup.exe' PerMachine='no' />" | 37 | " <Registration Id='{D54F896D-1952-43e6-9C67-B5652240618C}' Tag='foo' ProviderKey='foo' Version='1.0.0.0' ExecutableName='setup.exe' PerMachine='no' />" |
| 38 | " <Variable Id='Variable1' Type='numeric' Value='1' Hidden='no' Persisted='no' />" | 38 | " <Variable Id='Variable1' Type='numeric' Value='1' Hidden='no' Persisted='no' />" |
| 39 | " <RegistrySearch Id='Search1' Type='exists' Root='HKLM' Key='SOFTWARE\\Microsoft' Variable='Variable1' Condition='0' />" | 39 | " <RegistrySearch Id='Search1' Type='exists' Root='HKLM' Key='SOFTWARE\\Microsoft' Variable='Variable1' Condition='0' />" |
| 40 | " <CommandLine Variables='upperCase' />" | ||
| 40 | "</Bundle>"; | 41 | "</Bundle>"; |
| 41 | 42 | ||
| 42 | hr = VariableInitialize(&engineState.variables); | 43 | hr = VariableInitialize(&engineState.variables); |
diff --git a/src/burn/test/BurnUnitTest/TestData/PlanTest/BasicFunctionality_BundleA_manifest.xml b/src/burn/test/BurnUnitTest/TestData/PlanTest/BasicFunctionality_BundleA_manifest.xml index 65e3c63d..41d35706 100644 --- a/src/burn/test/BurnUnitTest/TestData/PlanTest/BasicFunctionality_BundleA_manifest.xml +++ b/src/burn/test/BurnUnitTest/TestData/PlanTest/BasicFunctionality_BundleA_manifest.xml | |||
| @@ -1 +1 @@ | |||
| <?xml version="1.0" encoding="utf-8"?><BurnManifest xmlns="http://wixtoolset.org/schemas/v4/2008/Burn"><Log PathVariable="WixBundleLog" Prefix="~BasicFunctionalityTests_BundleA" Extension=".log" /><RelatedBundle Id="{8C7E2C47-1EE7-4BBE-99A2-EAB7F3693F48}" Action="Upgrade" /><Variable Id="TestGroupName" Value="BasicFunctionalityTests" Type="string" Hidden="no" Persisted="no" /><Variable Id="WixBundleName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSource" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSourceFolder" Hidden="no" Persisted="yes" /><Variable Id="WixBundleLastUsedSource" Hidden="no" Persisted="yes" /><UX><Payload Id="WixStandardBootstrapperApplication" FilePath="wixstdba.dll" FileSize="245760" Hash="23F0568ADACD69D72B259F876B437707A0D41069" Packaging="embedded" SourcePath="u3" /><Payload Id="pay00kQk8rVqabvZJ20B.w1mpx7GDo" FilePath="thm.xml" FileSize="7980" Hash="7A88582165EEE4CA1D23F1B7DD58F8023552E049" Packaging="embedded" SourcePath="u0" /><Payload Id="payI2_GHsNfx8LnXWC6YRRG.VuyhI4" FilePath="thm.wxl" FileSize="4194" Hash="906294A9515835C5C8F4C5E86A32E179041C90DD" Packaging="embedded" SourcePath="u1" /><Payload Id="payjqSD44latbvJnf4vAQuVMUST73A" FilePath="logo.png" FileSize="852" Hash="239F10674BF6022854C1F1BF7C91955BDE34D3E4" Packaging="embedded" SourcePath="u2" /><Payload Id="uxTxMXPVMXwQrPTMIGa5WGt93w0Ns" FilePath="BootstrapperApplicationData.xml" FileSize="3698" Hash="AADECC6EF50E87D0642A5667CD612EF53E2CFB9A" Packaging="embedded" SourcePath="u4" /><Payload Id="uxYRbgitOs0K878jn5L_z7LdJ21KI" FilePath="BundleExtensionData.xml" FileSize="252" Hash="86688B13D3364ADB90BBA552F544D4D546AFD63D" Packaging="embedded" SourcePath="u5" /></UX><Container Id="WixAttachedContainer" FileSize="6959" Hash="4FC82B3432B5892D2A4EC593264A916DBDA9CE45" FilePath="BundleA.exe" AttachedIndex="1" Attached="yes" Primary="yes" /><Payload Id="PackageA" FilePath="PackageA.msi" FileSize="32768" Hash="89C61F8A105A81B08036401152A1FDE67CDC0158" Packaging="embedded" SourcePath="a0" Container="WixAttachedContainer" /><Payload Id="cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ" FilePath="1a.cab" FileSize="975" Hash="11DE5863C4B2A8762D0EE23FE25B7774CA07676B" Packaging="embedded" SourcePath="a1" Container="WixAttachedContainer" /><RollbackBoundary Id="WixDefaultBoundary" Vital="yes" Transaction="no" /><Registration Id="{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}" ExecutableName="BundleA.exe" PerMachine="yes" Tag="" Version="1.0.0.0" ProviderKey="{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"><Arp Register="yes" DisplayName="~BasicFunctionalityTests - BundleA" DisplayVersion="1.0.0.0" /></Registration><Chain><MsiPackage Id="PackageA" Cache="keep" CacheId="{64633047-D172-4BBB-B202-64337D15C952}v1.0.0.0" InstallSize="1951" Size="33743" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryForward="WixDefaultBoundary" RollbackBoundaryBackward="WixDefaultBoundary" LogPathVariable="WixBundleLog_PackageA" RollbackLogPathVariable="WixBundleRollbackLog_PackageA" ProductCode="{64633047-D172-4BBB-B202-64337D15C952}" Language="1033" Version="1.0.0.0" UpgradeCode="{7FD50F1B-D134-4365-923C-DFA160F74738}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><Provides Key="{64633047-D172-4BBB-B202-64337D15C952}" Version="1.0.0.0" DisplayName="~BasicFunctionalityTests - PackageA" /><RelatedPackage Id="{7FD50F1B-D134-4365-923C-DFA160F74738}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{7FD50F1B-D134-4365-923C-DFA160F74738}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageA" /><PayloadRef Id="cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ" /></MsiPackage></Chain></BurnManifest> \ No newline at end of file | <?xml version="1.0" encoding="utf-8"?><BurnManifest xmlns="http://wixtoolset.org/schemas/v4/2008/Burn"><Log PathVariable="WixBundleLog" Prefix="~BasicFunctionalityTests_BundleA" Extension=".log" /><RelatedBundle Id="{8C7E2C47-1EE7-4BBE-99A2-EAB7F3693F48}" Action="Upgrade" /><Variable Id="TestGroupName" Value="BasicFunctionalityTests" Type="string" Hidden="no" Persisted="no" /><Variable Id="WixBundleName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSource" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSourceFolder" Hidden="no" Persisted="yes" /><Variable Id="WixBundleLastUsedSource" Hidden="no" Persisted="yes" /><UX><Payload Id="WixStandardBootstrapperApplication" FilePath="wixstdba.dll" FileSize="245760" Hash="23F0568ADACD69D72B259F876B437707A0D41069" Packaging="embedded" SourcePath="u3" /><Payload Id="pay00kQk8rVqabvZJ20B.w1mpx7GDo" FilePath="thm.xml" FileSize="7980" Hash="7A88582165EEE4CA1D23F1B7DD58F8023552E049" Packaging="embedded" SourcePath="u0" /><Payload Id="payI2_GHsNfx8LnXWC6YRRG.VuyhI4" FilePath="thm.wxl" FileSize="4194" Hash="906294A9515835C5C8F4C5E86A32E179041C90DD" Packaging="embedded" SourcePath="u1" /><Payload Id="payjqSD44latbvJnf4vAQuVMUST73A" FilePath="logo.png" FileSize="852" Hash="239F10674BF6022854C1F1BF7C91955BDE34D3E4" Packaging="embedded" SourcePath="u2" /><Payload Id="uxTxMXPVMXwQrPTMIGa5WGt93w0Ns" FilePath="BootstrapperApplicationData.xml" FileSize="3698" Hash="AADECC6EF50E87D0642A5667CD612EF53E2CFB9A" Packaging="embedded" SourcePath="u4" /><Payload Id="uxYRbgitOs0K878jn5L_z7LdJ21KI" FilePath="BundleExtensionData.xml" FileSize="252" Hash="86688B13D3364ADB90BBA552F544D4D546AFD63D" Packaging="embedded" SourcePath="u5" /></UX><Container Id="WixAttachedContainer" FileSize="6959" Hash="4FC82B3432B5892D2A4EC593264A916DBDA9CE45" FilePath="BundleA.exe" AttachedIndex="1" Attached="yes" Primary="yes" /><Payload Id="PackageA" FilePath="PackageA.msi" FileSize="32768" Hash="89C61F8A105A81B08036401152A1FDE67CDC0158" Packaging="embedded" SourcePath="a0" Container="WixAttachedContainer" /><Payload Id="cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ" FilePath="1a.cab" FileSize="975" Hash="11DE5863C4B2A8762D0EE23FE25B7774CA07676B" Packaging="embedded" SourcePath="a1" Container="WixAttachedContainer" /><RollbackBoundary Id="WixDefaultBoundary" Vital="yes" Transaction="no" /><Registration Id="{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}" ExecutableName="BundleA.exe" PerMachine="yes" Tag="" Version="1.0.0.0" ProviderKey="{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"><Arp Register="yes" DisplayName="~BasicFunctionalityTests - BundleA" DisplayVersion="1.0.0.0" /></Registration><Chain><MsiPackage Id="PackageA" Cache="keep" CacheId="{64633047-D172-4BBB-B202-64337D15C952}v1.0.0.0" InstallSize="1951" Size="33743" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryForward="WixDefaultBoundary" RollbackBoundaryBackward="WixDefaultBoundary" LogPathVariable="WixBundleLog_PackageA" RollbackLogPathVariable="WixBundleRollbackLog_PackageA" ProductCode="{64633047-D172-4BBB-B202-64337D15C952}" Language="1033" Version="1.0.0.0" UpgradeCode="{7FD50F1B-D134-4365-923C-DFA160F74738}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><Provides Key="{64633047-D172-4BBB-B202-64337D15C952}" Version="1.0.0.0" DisplayName="~BasicFunctionalityTests - PackageA" /><RelatedPackage Id="{7FD50F1B-D134-4365-923C-DFA160F74738}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{7FD50F1B-D134-4365-923C-DFA160F74738}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageA" /><PayloadRef Id="cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ" /></MsiPackage></Chain><CommandLine Variables="upperCase" /></BurnManifest> \ No newline at end of file | ||
diff --git a/src/burn/test/BurnUnitTest/TestData/PlanTest/MsiTransaction_BundleAv1_manifest.xml b/src/burn/test/BurnUnitTest/TestData/PlanTest/MsiTransaction_BundleAv1_manifest.xml index cca9a982..65c691fc 100644 --- a/src/burn/test/BurnUnitTest/TestData/PlanTest/MsiTransaction_BundleAv1_manifest.xml +++ b/src/burn/test/BurnUnitTest/TestData/PlanTest/MsiTransaction_BundleAv1_manifest.xml | |||
| @@ -1 +1 @@ | |||
| <?xml version="1.0" encoding="utf-8"?><BurnManifest xmlns="http://wixtoolset.org/schemas/v4/2008/Burn"><Log PathVariable="WixBundleLog" Prefix="~MsiTransactionTests_BundleAv1" Extension=".log" /><RelatedBundle Id="{90ED10D5-B187-4470-B498-05D80DAB729A}" Action="Upgrade" /><Variable Id="TestGroupName" Value="MsiTransactionTests" Type="string" Hidden="no" Persisted="no" /><Variable Id="WixBundleName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSource" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSourceFolder" Hidden="no" Persisted="yes" /><Variable Id="WixBundleLastUsedSource" Hidden="no" Persisted="yes" /><UX><Payload Id="WixStandardBootstrapperApplication" FilePath="wixstdba.dll" FileSize="245760" Hash="23F0568ADACD69D72B259F876B437707A0D41069" Packaging="embedded" SourcePath="u3" /><Payload Id="pay00kQk8rVqabvZJ20B.w1mpx7GDo" FilePath="thm.xml" FileSize="7980" Hash="7A88582165EEE4CA1D23F1B7DD58F8023552E049" Packaging="embedded" SourcePath="u0" /><Payload Id="payI2_GHsNfx8LnXWC6YRRG.VuyhI4" FilePath="thm.wxl" FileSize="4194" Hash="906294A9515835C5C8F4C5E86A32E179041C90DD" Packaging="embedded" SourcePath="u1" /><Payload Id="payjqSD44latbvJnf4vAQuVMUST73A" FilePath="logo.png" FileSize="852" Hash="239F10674BF6022854C1F1BF7C91955BDE34D3E4" Packaging="embedded" SourcePath="u2" /><Payload Id="uxTxMXPVMXwQrPTMIGa5WGt93w0Ns" FilePath="BootstrapperApplicationData.xml" FileSize="6742" Hash="E124C9502891F1277A47D1AEC0F1755BA605E6E3" Packaging="embedded" SourcePath="u4" /><Payload Id="uxYRbgitOs0K878jn5L_z7LdJ21KI" FilePath="BundleExtensionData.xml" FileSize="252" Hash="86688B13D3364ADB90BBA552F544D4D546AFD63D" Packaging="embedded" SourcePath="u5" /></UX><Container Id="WixAttachedContainer" FileSize="16403" Hash="AABC770A92954AE4234A322A3621333B3FDDE225" FilePath="BundleAv1.exe" AttachedIndex="1" Attached="yes" Primary="yes" /><Payload Id="PackageA" FilePath="PackageA.msi" FileSize="32768" Hash="C763E00CD117F79643F58442B87F51721554686D" Packaging="embedded" SourcePath="a0" Container="WixAttachedContainer" /><Payload Id="PackageB" FilePath="PackageBv1.msi" FileSize="32768" Hash="25570B420BD65BE187AB56B695A0CC36712A224F" Packaging="embedded" SourcePath="a1" Container="WixAttachedContainer" /><Payload Id="PackageC" FilePath="PackageCv1.msi" FileSize="32768" Hash="23472E6C185E9B3DC9C53F92435D1C4F018C06DB" Packaging="embedded" SourcePath="a2" Container="WixAttachedContainer" /><Payload Id="cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ" FilePath="1a.cab" FileSize="975" Hash="11DE5863C4B2A8762D0EE23FE25B7774CA07676B" Packaging="embedded" SourcePath="a3" Container="WixAttachedContainer" /><Payload Id="cablKtJUKxAbhSMIBwQU6vJ_CDsIkE" FilePath="1bv1.cab" FileSize="975" Hash="11DE5863C4B2A8762D0EE23FE25B7774CA07676B" Packaging="embedded" SourcePath="a4" Container="WixAttachedContainer" /><Payload Id="cab3wekki1le1R8RPDV2B8_g8jcjZc" FilePath="1cv1.cab" FileSize="975" Hash="11DE5863C4B2A8762D0EE23FE25B7774CA07676B" Packaging="embedded" SourcePath="a5" Container="WixAttachedContainer" /><RollbackBoundary Id="WixDefaultBoundary" Vital="yes" Transaction="no" /><RollbackBoundary Id="rbaOCA08D8ky7uBOK71_6FWz1K3TuQ" Vital="yes" Transaction="yes" /><Registration Id="{E6469F05-BDC8-4EB8-B218-67412543EFAA}" ExecutableName="BundleAv1.exe" PerMachine="yes" Tag="" Version="1.0.0.0" ProviderKey="{E6469F05-BDC8-4EB8-B218-67412543EFAA}"><Arp Register="yes" DisplayName="~MsiTransactionTests - BundleAv1" DisplayVersion="1.0.0.0" /></Registration><Chain><MsiPackage Id="PackageA" Cache="keep" CacheId="{01E6B748-7B95-4BA9-976D-B6F35076CEF4}v1.0.0.0" InstallSize="1951" Size="33743" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryForward="WixDefaultBoundary" RollbackBoundaryBackward="WixDefaultBoundary" LogPathVariable="WixBundleLog_PackageA" RollbackLogPathVariable="WixBundleRollbackLog_PackageA" ProductCode="{01E6B748-7B95-4BA9-976D-B6F35076CEF4}" Language="1033" Version="1.0.0.0" UpgradeCode="{7772FCDF-5FDB-497D-B5DF-C6D17D667976}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><Provides Key="{01E6B748-7B95-4BA9-976D-B6F35076CEF4}" Version="1.0.0.0" DisplayName="~MsiTransactionTests - PackageA" /><RelatedPackage Id="{7772FCDF-5FDB-497D-B5DF-C6D17D667976}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{7772FCDF-5FDB-497D-B5DF-C6D17D667976}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageA" /><PayloadRef Id="cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ" /></MsiPackage><MsiPackage Id="PackageB" Cache="keep" CacheId="{D1D01094-23CE-4AF0-84B6-4A1A133F21D3}v1.0.0.0" InstallSize="1951" Size="33743" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryForward="rbaOCA08D8ky7uBOK71_6FWz1K3TuQ" LogPathVariable="WixBundleLog_PackageB" RollbackLogPathVariable="WixBundleRollbackLog_PackageB" ProductCode="{D1D01094-23CE-4AF0-84B6-4A1A133F21D3}" Language="1033" Version="1.0.0.0" UpgradeCode="{EAFC0C6B-626E-415C-8132-536FBD19F49B}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><Provides Key="{D1D01094-23CE-4AF0-84B6-4A1A133F21D3}" Version="1.0.0.0" DisplayName="~MsiTransactionTests - PackageBv1" /><RelatedPackage Id="{EAFC0C6B-626E-415C-8132-536FBD19F49B}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{EAFC0C6B-626E-415C-8132-536FBD19F49B}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageB" /><PayloadRef Id="cablKtJUKxAbhSMIBwQU6vJ_CDsIkE" /></MsiPackage><MsiPackage Id="PackageC" Cache="keep" CacheId="{A497C5E5-C78B-4F0B-BF72-B33E1DB1C4B8}v1.0.0.0" InstallSize="1951" Size="33743" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryBackward="rbaOCA08D8ky7uBOK71_6FWz1K3TuQ" LogPathVariable="WixBundleLog_PackageC" RollbackLogPathVariable="WixBundleRollbackLog_PackageC" ProductCode="{A497C5E5-C78B-4F0B-BF72-B33E1DB1C4B8}" Language="1033" Version="1.0.0.0" UpgradeCode="{A18BDC12-DAEC-43EE-87D1-31B2C2BC6269}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><Provides Key="{A497C5E5-C78B-4F0B-BF72-B33E1DB1C4B8}" Version="1.0.0.0" DisplayName="~MsiTransactionTests - PackageCv1" /><RelatedPackage Id="{A18BDC12-DAEC-43EE-87D1-31B2C2BC6269}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{A18BDC12-DAEC-43EE-87D1-31B2C2BC6269}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageC" /><PayloadRef Id="cab3wekki1le1R8RPDV2B8_g8jcjZc" /></MsiPackage></Chain></BurnManifest> \ No newline at end of file | <?xml version="1.0" encoding="utf-8"?><BurnManifest xmlns="http://wixtoolset.org/schemas/v4/2008/Burn"><Log PathVariable="WixBundleLog" Prefix="~MsiTransactionTests_BundleAv1" Extension=".log" /><RelatedBundle Id="{90ED10D5-B187-4470-B498-05D80DAB729A}" Action="Upgrade" /><Variable Id="TestGroupName" Value="MsiTransactionTests" Type="string" Hidden="no" Persisted="no" /><Variable Id="WixBundleName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSource" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSourceFolder" Hidden="no" Persisted="yes" /><Variable Id="WixBundleLastUsedSource" Hidden="no" Persisted="yes" /><UX><Payload Id="WixStandardBootstrapperApplication" FilePath="wixstdba.dll" FileSize="245760" Hash="23F0568ADACD69D72B259F876B437707A0D41069" Packaging="embedded" SourcePath="u3" /><Payload Id="pay00kQk8rVqabvZJ20B.w1mpx7GDo" FilePath="thm.xml" FileSize="7980" Hash="7A88582165EEE4CA1D23F1B7DD58F8023552E049" Packaging="embedded" SourcePath="u0" /><Payload Id="payI2_GHsNfx8LnXWC6YRRG.VuyhI4" FilePath="thm.wxl" FileSize="4194" Hash="906294A9515835C5C8F4C5E86A32E179041C90DD" Packaging="embedded" SourcePath="u1" /><Payload Id="payjqSD44latbvJnf4vAQuVMUST73A" FilePath="logo.png" FileSize="852" Hash="239F10674BF6022854C1F1BF7C91955BDE34D3E4" Packaging="embedded" SourcePath="u2" /><Payload Id="uxTxMXPVMXwQrPTMIGa5WGt93w0Ns" FilePath="BootstrapperApplicationData.xml" FileSize="6742" Hash="E124C9502891F1277A47D1AEC0F1755BA605E6E3" Packaging="embedded" SourcePath="u4" /><Payload Id="uxYRbgitOs0K878jn5L_z7LdJ21KI" FilePath="BundleExtensionData.xml" FileSize="252" Hash="86688B13D3364ADB90BBA552F544D4D546AFD63D" Packaging="embedded" SourcePath="u5" /></UX><Container Id="WixAttachedContainer" FileSize="16403" Hash="AABC770A92954AE4234A322A3621333B3FDDE225" FilePath="BundleAv1.exe" AttachedIndex="1" Attached="yes" Primary="yes" /><Payload Id="PackageA" FilePath="PackageA.msi" FileSize="32768" Hash="C763E00CD117F79643F58442B87F51721554686D" Packaging="embedded" SourcePath="a0" Container="WixAttachedContainer" /><Payload Id="PackageB" FilePath="PackageBv1.msi" FileSize="32768" Hash="25570B420BD65BE187AB56B695A0CC36712A224F" Packaging="embedded" SourcePath="a1" Container="WixAttachedContainer" /><Payload Id="PackageC" FilePath="PackageCv1.msi" FileSize="32768" Hash="23472E6C185E9B3DC9C53F92435D1C4F018C06DB" Packaging="embedded" SourcePath="a2" Container="WixAttachedContainer" /><Payload Id="cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ" FilePath="1a.cab" FileSize="975" Hash="11DE5863C4B2A8762D0EE23FE25B7774CA07676B" Packaging="embedded" SourcePath="a3" Container="WixAttachedContainer" /><Payload Id="cablKtJUKxAbhSMIBwQU6vJ_CDsIkE" FilePath="1bv1.cab" FileSize="975" Hash="11DE5863C4B2A8762D0EE23FE25B7774CA07676B" Packaging="embedded" SourcePath="a4" Container="WixAttachedContainer" /><Payload Id="cab3wekki1le1R8RPDV2B8_g8jcjZc" FilePath="1cv1.cab" FileSize="975" Hash="11DE5863C4B2A8762D0EE23FE25B7774CA07676B" Packaging="embedded" SourcePath="a5" Container="WixAttachedContainer" /><RollbackBoundary Id="WixDefaultBoundary" Vital="yes" Transaction="no" /><RollbackBoundary Id="rbaOCA08D8ky7uBOK71_6FWz1K3TuQ" Vital="yes" Transaction="yes" /><Registration Id="{E6469F05-BDC8-4EB8-B218-67412543EFAA}" ExecutableName="BundleAv1.exe" PerMachine="yes" Tag="" Version="1.0.0.0" ProviderKey="{E6469F05-BDC8-4EB8-B218-67412543EFAA}"><Arp Register="yes" DisplayName="~MsiTransactionTests - BundleAv1" DisplayVersion="1.0.0.0" /></Registration><Chain><MsiPackage Id="PackageA" Cache="keep" CacheId="{01E6B748-7B95-4BA9-976D-B6F35076CEF4}v1.0.0.0" InstallSize="1951" Size="33743" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryForward="WixDefaultBoundary" RollbackBoundaryBackward="WixDefaultBoundary" LogPathVariable="WixBundleLog_PackageA" RollbackLogPathVariable="WixBundleRollbackLog_PackageA" ProductCode="{01E6B748-7B95-4BA9-976D-B6F35076CEF4}" Language="1033" Version="1.0.0.0" UpgradeCode="{7772FCDF-5FDB-497D-B5DF-C6D17D667976}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><Provides Key="{01E6B748-7B95-4BA9-976D-B6F35076CEF4}" Version="1.0.0.0" DisplayName="~MsiTransactionTests - PackageA" /><RelatedPackage Id="{7772FCDF-5FDB-497D-B5DF-C6D17D667976}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{7772FCDF-5FDB-497D-B5DF-C6D17D667976}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageA" /><PayloadRef Id="cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ" /></MsiPackage><MsiPackage Id="PackageB" Cache="keep" CacheId="{D1D01094-23CE-4AF0-84B6-4A1A133F21D3}v1.0.0.0" InstallSize="1951" Size="33743" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryForward="rbaOCA08D8ky7uBOK71_6FWz1K3TuQ" LogPathVariable="WixBundleLog_PackageB" RollbackLogPathVariable="WixBundleRollbackLog_PackageB" ProductCode="{D1D01094-23CE-4AF0-84B6-4A1A133F21D3}" Language="1033" Version="1.0.0.0" UpgradeCode="{EAFC0C6B-626E-415C-8132-536FBD19F49B}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><Provides Key="{D1D01094-23CE-4AF0-84B6-4A1A133F21D3}" Version="1.0.0.0" DisplayName="~MsiTransactionTests - PackageBv1" /><RelatedPackage Id="{EAFC0C6B-626E-415C-8132-536FBD19F49B}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{EAFC0C6B-626E-415C-8132-536FBD19F49B}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageB" /><PayloadRef Id="cablKtJUKxAbhSMIBwQU6vJ_CDsIkE" /></MsiPackage><MsiPackage Id="PackageC" Cache="keep" CacheId="{A497C5E5-C78B-4F0B-BF72-B33E1DB1C4B8}v1.0.0.0" InstallSize="1951" Size="33743" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryBackward="rbaOCA08D8ky7uBOK71_6FWz1K3TuQ" LogPathVariable="WixBundleLog_PackageC" RollbackLogPathVariable="WixBundleRollbackLog_PackageC" ProductCode="{A497C5E5-C78B-4F0B-BF72-B33E1DB1C4B8}" Language="1033" Version="1.0.0.0" UpgradeCode="{A18BDC12-DAEC-43EE-87D1-31B2C2BC6269}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><Provides Key="{A497C5E5-C78B-4F0B-BF72-B33E1DB1C4B8}" Version="1.0.0.0" DisplayName="~MsiTransactionTests - PackageCv1" /><RelatedPackage Id="{A18BDC12-DAEC-43EE-87D1-31B2C2BC6269}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{A18BDC12-DAEC-43EE-87D1-31B2C2BC6269}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageC" /><PayloadRef Id="cab3wekki1le1R8RPDV2B8_g8jcjZc" /></MsiPackage></Chain><CommandLine Variables="upperCase" /></BurnManifest> \ No newline at end of file | ||
diff --git a/src/burn/test/BurnUnitTest/TestData/PlanTest/Slipstream_BundleA_manifest.xml b/src/burn/test/BurnUnitTest/TestData/PlanTest/Slipstream_BundleA_manifest.xml index 996976b2..a99dea00 100644 --- a/src/burn/test/BurnUnitTest/TestData/PlanTest/Slipstream_BundleA_manifest.xml +++ b/src/burn/test/BurnUnitTest/TestData/PlanTest/Slipstream_BundleA_manifest.xml | |||
| @@ -1 +1 @@ | |||
| <?xml version="1.0" encoding="utf-8"?><BurnManifest xmlns="http://wixtoolset.org/schemas/v4/2008/Burn"><Log PathVariable="WixBundleLog" Prefix="~SlipstreamTests_BundleA" Extension=".log" /><RelatedBundle Id="{62C28DAF-A13E-4F55-ACA1-FB843630789C}" Action="Upgrade" /><Variable Id="TestGroupName" Value="SlipstreamTests" Type="string" Hidden="no" Persisted="no" /><Variable Id="WixBundleName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSource" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSourceFolder" Hidden="no" Persisted="yes" /><Variable Id="WixBundleLastUsedSource" Hidden="no" Persisted="yes" /><RegistrySearch Id="NETFRAMEWORK45" Variable="NETFRAMEWORK45" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Value="Release" Type="value" VariableType="string" /><UX><Payload Id="WixManagedBootstrapperApplicationHost" FilePath="mbahost.dll" FileSize="140288" Hash="4569C53566B1025E243E0C29A96C608BD4019979" Packaging="embedded" SourcePath="u30" /><Payload Id="payO60IVK4ATGzPpMz3rwVbUWl6DyU" FilePath="WixToolset.Mba.Host.config" FileSize="783" Hash="B5BDD5E7179A94C2C817069913CA8C099DF811B9" Packaging="embedded" SourcePath="u0" /><Payload Id="payxj4zDAKL2NVlz4ohp0GvwFHepyI" FilePath="TestBA.dll" FileSize="25088" Hash="DB12DB6565CDBC4E9705204830E421ACEB710129" Packaging="embedded" SourcePath="u1" /><Payload Id="pay1hOSAUC8_D633cD2TXpIXCL30OU" FilePath="mbanative.dll" FileSize="118272" Hash="3A7A20D97B0546A23A025EE5774BE237C14D2957" Packaging="embedded" SourcePath="u2" /><Payload Id="payujy6Izl_BlUNfHt2eI.ADfjYAv4" FilePath="WixToolset.Mba.Core.dll" FileSize="114688" Hash="56BA3EA94BEBF8EB562C914495E1594E74F05DBE" Packaging="embedded" SourcePath="u3" /><Payload Id="payR4EbR4OTDZpPEycWaSSM_gZRBWM" FilePath="mbapreq.thm" FileSize="3599" Hash="8D9797C1E1A50AECB8B85FFCEA6A2A2EF611BD7F" Packaging="embedded" SourcePath="u4" /><Payload Id="paylVCy2Ecl8pHPdJTCQZryUG4T9us" FilePath="mbapreq.png" FileSize="797" Hash="75AE41181581FD6376CA9CA88147011E48BF9A30" Packaging="embedded" SourcePath="u5" /><Payload Id="payTaG4B_lob1aLcKFaOqSSG3MPMpU" FilePath="mbapreq.wxl" FileSize="2237" Hash="068B3C5E27AECE7987EABAA2802C9EB07B39EAF8" Packaging="embedded" SourcePath="u6" /><Payload Id="payZwIGuiezVTitZOoZKxyh2DdRSGs" FilePath="1028\mbapreq.wxl" FileSize="1998" Hash="A989D9B892F497215D81F903591ECB6CD50CFFFC" Packaging="embedded" SourcePath="u7" /><Payload Id="pay.herBWX.LlOh8jLsx24aWdunV_0" FilePath="1029\mbapreq.wxl" FileSize="2428" Hash="E6B8E4B1AA89430EB6A5A1E997CA3D1D2F968285" Packaging="embedded" SourcePath="u8" /><Payload Id="pay8DkMszYsoxxdgX14huLDMYXylQg" FilePath="1030\mbapreq.wxl" FileSize="2256" Hash="612CD2FD0CF3800639385C0BF4D805B24507D356" Packaging="embedded" SourcePath="u9" /><Payload Id="payPaHpoTeOdkW.TK99IDwktNLhTAg" FilePath="1031\mbapreq.wxl" FileSize="2409" Hash="E59A8F11D95AC17FC70BD718706EE36BFA50EF02" Packaging="embedded" SourcePath="u10" /><Payload Id="pay45AtAzterLTMzZgdxxtuYvaiXwU" FilePath="1032\mbapreq.wxl" FileSize="3368" Hash="154E0A658BA7EE59889224A231423634A9725547" Packaging="embedded" SourcePath="u11" /><Payload Id="payA2VEKIqhePyNIEmr14eyH3JoVLc" FilePath="1035\mbapreq.wxl" FileSize="2205" Hash="6AAE55269E42F99A5D88ADD18C433384DEB9E956" Packaging="embedded" SourcePath="u12" /><Payload Id="payvre23ObscjzhcaFIifUAkXMdPa8" FilePath="1036\mbapreq.wxl" FileSize="2276" Hash="7DC74874357F50AE8C4871D8F4DC06B337CF6352" Packaging="embedded" SourcePath="u13" /><Payload Id="paytxUV3vuBbG2c.a9c.d_sZX2x6wA" FilePath="1038\mbapreq.wxl" FileSize="2362" Hash="B60C34DE38E6E48BA0841E8A962C17179FC1B69A" Packaging="embedded" SourcePath="u14" /><Payload Id="payYvMWRK9xelo5.sQn7jRkJIaBp9A" FilePath="1040\mbapreq.wxl" FileSize="2273" Hash="902D231AD6306087F215DEABB7F2AB2F8072C401" Packaging="embedded" SourcePath="u15" /><Payload Id="pay68KKSApyQimbA25t6kSbqhdeH10" FilePath="1041\mbapreq.wxl" FileSize="2518" Hash="4095A1AFCF18C01F7DA51A1A389C2FBBB1A82A12" Packaging="embedded" SourcePath="u16" /><Payload Id="paypiqxaHpYZqx.9eDVjQrj1igLbRY" FilePath="1042\mbapreq.wxl" FileSize="2209" Hash="99CE8B42300EF656E6BD44F01766DC638CB0496F" Packaging="embedded" SourcePath="u17" /><Payload Id="payTO0YwZzxKpbqdrBVUcVRTu3BFe8" FilePath="1043\mbapreq.wxl" FileSize="2282" Hash="87117EE32E0004E25DDCEB1A7D417F3A02856A50" Packaging="embedded" SourcePath="u18" /><Payload Id="payIXg2ldBJukRzhqWolJVOEbTmF34" FilePath="1044\mbapreq.wxl" FileSize="2141" Hash="5AED841C6A870C3A8BAF8A10D00F887A781D0CF0" Packaging="embedded" SourcePath="u19" /><Payload Id="payOHIZbSkIvrpwKkkXI173tv3u3B4" FilePath="1045\mbapreq.wxl" FileSize="2338" Hash="07E37CBC59298F24A5C8C3B8FEB7A45DADF8CD07" Packaging="embedded" SourcePath="u20" /><Payload Id="payQRQ_UZl_R2UtV0xDXB2yeH2bg3E" FilePath="1046\mbapreq.wxl" FileSize="2118" Hash="AEC0CE51E8E335E9B86F1AC7E39CCD172B896582" Packaging="embedded" SourcePath="u21" /><Payload Id="payhrejLLBfc1i27iN._QPhQ4K337I" FilePath="1049\mbapreq.wxl" FileSize="2851" Hash="9628BADB173B171ED85D902634D9AA5D91FE9721" Packaging="embedded" SourcePath="u22" /><Payload Id="payqEzaDNzxB68vGp29jgDcCos6dvg" FilePath="1051\mbapreq.wxl" FileSize="2304" Hash="B584E8C0D7F9B7A1BB70BC00E42BFD35BED5D81D" Packaging="embedded" SourcePath="u23" /><Payload Id="paydz8Vk8xSTyYohgGXTSIxWGXL5.Q" FilePath="1053\mbapreq.wxl" FileSize="2102" Hash="67E93F555DBFEF8508E79F7CA8CE76B881308760" Packaging="embedded" SourcePath="u24" /><Payload Id="pay0HRUZTlbC3taSOffJBsEj92Br8Y" FilePath="1055\mbapreq.wxl" FileSize="2273" Hash="AEB8C90D66942A5CD73EA52A6F2ADD4F7D518A0D" Packaging="embedded" SourcePath="u25" /><Payload Id="payIvUOkc_EMH7laMFehefNolV8hZo" FilePath="1060\mbapreq.wxl" FileSize="2170" Hash="B1D4B71907B8BD82DD8B047404AF10FDBBE5CBA0" Packaging="embedded" SourcePath="u26" /><Payload Id="payLFhOb.rHuk4sW5CYAPMShG0NjGI" FilePath="2052\mbapreq.wxl" FileSize="1953" Hash="C8FB8982EC71C48D6EA021ADD9AAA7BCB0656281" Packaging="embedded" SourcePath="u27" /><Payload Id="payqIKCmERK7Nhxx_nNXvRxdKqKDbI" FilePath="2070\mbapreq.wxl" FileSize="2182" Hash="825F27A543907ED27E815EC67DFD48AF7BF5831E" Packaging="embedded" SourcePath="u28" /><Payload Id="payqeWUzIVaEqjuRXN0z8ECC3Y4tCc" FilePath="3082\mbapreq.wxl" FileSize="2369" Hash="39C07C31077AAFDC0DD208273AA41654CAD80FDD" Packaging="embedded" SourcePath="u29" /><Payload Id="paylfeHEjJSSTnNzY9QMZM2Ye3Ipy4" FilePath="mbapreq.dll" FileSize="245760" Hash="6499FA21D178131DDE13A4EF44ABEC32E91D65D4" Packaging="embedded" SourcePath="u31" /><Payload Id="payDPxs6uy8nbky.R7zhir2RRAfc.c" FilePath="WixToolset.Mba.Host.dll" FileSize="11264" Hash="9E6452891E401EB211DD41550A09FDF98EC0992F" Packaging="embedded" SourcePath="u32" /><Payload Id="uxTxMXPVMXwQrPTMIGa5WGt93w0Ns" FilePath="BootstrapperApplicationData.xml" FileSize="14292" Hash="CDF09A0723F4F33C13670BBAFCFFA7E660E15DFC" Packaging="embedded" SourcePath="u33" /><Payload Id="uxYRbgitOs0K878jn5L_z7LdJ21KI" FilePath="BundleExtensionData.xml" FileSize="252" Hash="86688B13D3364ADB90BBA552F544D4D546AFD63D" Packaging="embedded" SourcePath="u34" /></UX><Payload Id="NetFx48Web" FilePath="redist\ndp48-web.exe" FileSize="1479400" Hash="5A84A8E612E270E27D0061D58DB6B470153BE1F9" DownloadUrl="https://go.microsoft.com/fwlink/?LinkId=2085155" Packaging="external" SourcePath="redist\ndp48-web.exe" /><Payload Id="PackageA" FilePath="PackageAv1.msi" FileSize="32768" Hash="2369B16B7219B3C834DFBC5D2AF8B2EF8803D43D" Packaging="external" SourcePath="PackageAv1.msi" /><Payload Id="PatchA" FilePath="PatchA.msp" FileSize="20480" Hash="FABC6C18E4A778E127E84CDF67F93A291CAEC8BB" Packaging="external" SourcePath="PatchA.msp" /><RollbackBoundary Id="WixDefaultBoundary" Vital="yes" Transaction="no" /><Registration Id="{22D1DDBA-284D-40A7-BD14-95EA07906F21}" ExecutableName="BundleA.exe" PerMachine="yes" Tag="" Version="1.0.0.0" ProviderKey="{22D1DDBA-284D-40A7-BD14-95EA07906F21}"><Arp Register="yes" DisplayName="~SlipstreamTests - BundleA" DisplayVersion="1.0.0.0" /></Registration><Chain><ExePackage Id="NetFx48Web" Cache="keep" CacheId="5A84A8E612E270E27D0061D58DB6B470153BE1F9" InstallSize="1479400" Size="1479400" PerMachine="yes" Permanent="yes" Vital="yes" RollbackBoundaryForward="WixDefaultBoundary" LogPathVariable="NetFx48WebLog" RollbackLogPathVariable="WixBundleRollbackLog_NetFx48Web" DetectCondition="NETFRAMEWORK45 >= 528040" InstallArguments="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx48WebLog].html"" UninstallArguments="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx48WebLog].html"" RepairArguments="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx48WebLog].html"" Repairable="yes" Protocol="netfx4"><PayloadRef Id="NetFx48Web" /></ExePackage><MsiPackage Id="PackageA" Cache="keep" CacheId="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}v1.0.0.0" InstallSize="2103" Size="32768" PerMachine="yes" Permanent="no" Vital="yes" LogPathVariable="WixBundleLog_PackageA" RollbackLogPathVariable="WixBundleRollbackLog_PackageA" ProductCode="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Language="1033" Version="1.0.0.0" UpgradeCode="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><SlipstreamMsp Id="PatchA" /><Provides Key="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Version="1.0.0.0" DisplayName="~SlipstreamTests - PackageA" /><RelatedPackage Id="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageA" /></MsiPackage><MspPackage Id="PatchA" Cache="keep" CacheId="{0A5113E3-06A5-4CE0-8E83-9EB42F6764A6}" InstallSize="20480" Size="20480" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryBackward="WixDefaultBoundary" LogPathVariable="WixBundleLog_PatchA" RollbackLogPathVariable="WixBundleRollbackLog_PatchA" PatchCode="{0A5113E3-06A5-4CE0-8E83-9EB42F6764A6}" PatchXml="<?xml version="1.0" encoding="utf-16"?><MsiPatch xmlns="http://www.microsoft.com/msi/patch_applicability.xsd" SchemaVersion="1.0.0.0" PatchGUID="{0A5113E3-06A5-4CE0-8E83-9EB42F6764A6}" MinMsiVersion="5" TargetsRTM="true"><TargetProduct MinMsiVersion="500"><TargetProductCode Validate="true">{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}</TargetProductCode><TargetVersion Validate="true" ComparisonType="Equal" ComparisonFilter="MajorMinorUpdate">1.0.0.0</TargetVersion><UpdatedVersion>1.0.1.0</UpdatedVersion><TargetLanguage Validate="false">1033</TargetLanguage><UpdatedLanguages>1033</UpdatedLanguages><UpgradeCode Validate="true">{DB87BB66-FE5D-4293-81AC-EE313D3F864B}</UpgradeCode></TargetProduct><TargetProductCode>{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}</TargetProductCode></MsiPatch>"><Provides Key="{0A5113E3-06A5-4CE0-8E83-9EB42F6764A6}" DisplayName="SlipstreamTests - Patch A" /><PayloadRef Id="PatchA" /></MspPackage></Chain><PatchTargetCode TargetCode="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Product="yes" /></BurnManifest> \ No newline at end of file | <?xml version="1.0" encoding="utf-8"?><BurnManifest xmlns="http://wixtoolset.org/schemas/v4/2008/Burn"><Log PathVariable="WixBundleLog" Prefix="~SlipstreamTests_BundleA" Extension=".log" /><RelatedBundle Id="{62C28DAF-A13E-4F55-ACA1-FB843630789C}" Action="Upgrade" /><Variable Id="TestGroupName" Value="SlipstreamTests" Type="string" Hidden="no" Persisted="no" /><Variable Id="WixBundleName" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSource" Hidden="no" Persisted="yes" /><Variable Id="WixBundleOriginalSourceFolder" Hidden="no" Persisted="yes" /><Variable Id="WixBundleLastUsedSource" Hidden="no" Persisted="yes" /><RegistrySearch Id="NETFRAMEWORK45" Variable="NETFRAMEWORK45" Root="HKLM" Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" Value="Release" Type="value" VariableType="string" /><UX><Payload Id="WixManagedBootstrapperApplicationHost" FilePath="mbahost.dll" FileSize="140288" Hash="4569C53566B1025E243E0C29A96C608BD4019979" Packaging="embedded" SourcePath="u30" /><Payload Id="payO60IVK4ATGzPpMz3rwVbUWl6DyU" FilePath="WixToolset.Mba.Host.config" FileSize="783" Hash="B5BDD5E7179A94C2C817069913CA8C099DF811B9" Packaging="embedded" SourcePath="u0" /><Payload Id="payxj4zDAKL2NVlz4ohp0GvwFHepyI" FilePath="TestBA.dll" FileSize="25088" Hash="DB12DB6565CDBC4E9705204830E421ACEB710129" Packaging="embedded" SourcePath="u1" /><Payload Id="pay1hOSAUC8_D633cD2TXpIXCL30OU" FilePath="mbanative.dll" FileSize="118272" Hash="3A7A20D97B0546A23A025EE5774BE237C14D2957" Packaging="embedded" SourcePath="u2" /><Payload Id="payujy6Izl_BlUNfHt2eI.ADfjYAv4" FilePath="WixToolset.Mba.Core.dll" FileSize="114688" Hash="56BA3EA94BEBF8EB562C914495E1594E74F05DBE" Packaging="embedded" SourcePath="u3" /><Payload Id="payR4EbR4OTDZpPEycWaSSM_gZRBWM" FilePath="mbapreq.thm" FileSize="3599" Hash="8D9797C1E1A50AECB8B85FFCEA6A2A2EF611BD7F" Packaging="embedded" SourcePath="u4" /><Payload Id="paylVCy2Ecl8pHPdJTCQZryUG4T9us" FilePath="mbapreq.png" FileSize="797" Hash="75AE41181581FD6376CA9CA88147011E48BF9A30" Packaging="embedded" SourcePath="u5" /><Payload Id="payTaG4B_lob1aLcKFaOqSSG3MPMpU" FilePath="mbapreq.wxl" FileSize="2237" Hash="068B3C5E27AECE7987EABAA2802C9EB07B39EAF8" Packaging="embedded" SourcePath="u6" /><Payload Id="payZwIGuiezVTitZOoZKxyh2DdRSGs" FilePath="1028\mbapreq.wxl" FileSize="1998" Hash="A989D9B892F497215D81F903591ECB6CD50CFFFC" Packaging="embedded" SourcePath="u7" /><Payload Id="pay.herBWX.LlOh8jLsx24aWdunV_0" FilePath="1029\mbapreq.wxl" FileSize="2428" Hash="E6B8E4B1AA89430EB6A5A1E997CA3D1D2F968285" Packaging="embedded" SourcePath="u8" /><Payload Id="pay8DkMszYsoxxdgX14huLDMYXylQg" FilePath="1030\mbapreq.wxl" FileSize="2256" Hash="612CD2FD0CF3800639385C0BF4D805B24507D356" Packaging="embedded" SourcePath="u9" /><Payload Id="payPaHpoTeOdkW.TK99IDwktNLhTAg" FilePath="1031\mbapreq.wxl" FileSize="2409" Hash="E59A8F11D95AC17FC70BD718706EE36BFA50EF02" Packaging="embedded" SourcePath="u10" /><Payload Id="pay45AtAzterLTMzZgdxxtuYvaiXwU" FilePath="1032\mbapreq.wxl" FileSize="3368" Hash="154E0A658BA7EE59889224A231423634A9725547" Packaging="embedded" SourcePath="u11" /><Payload Id="payA2VEKIqhePyNIEmr14eyH3JoVLc" FilePath="1035\mbapreq.wxl" FileSize="2205" Hash="6AAE55269E42F99A5D88ADD18C433384DEB9E956" Packaging="embedded" SourcePath="u12" /><Payload Id="payvre23ObscjzhcaFIifUAkXMdPa8" FilePath="1036\mbapreq.wxl" FileSize="2276" Hash="7DC74874357F50AE8C4871D8F4DC06B337CF6352" Packaging="embedded" SourcePath="u13" /><Payload Id="paytxUV3vuBbG2c.a9c.d_sZX2x6wA" FilePath="1038\mbapreq.wxl" FileSize="2362" Hash="B60C34DE38E6E48BA0841E8A962C17179FC1B69A" Packaging="embedded" SourcePath="u14" /><Payload Id="payYvMWRK9xelo5.sQn7jRkJIaBp9A" FilePath="1040\mbapreq.wxl" FileSize="2273" Hash="902D231AD6306087F215DEABB7F2AB2F8072C401" Packaging="embedded" SourcePath="u15" /><Payload Id="pay68KKSApyQimbA25t6kSbqhdeH10" FilePath="1041\mbapreq.wxl" FileSize="2518" Hash="4095A1AFCF18C01F7DA51A1A389C2FBBB1A82A12" Packaging="embedded" SourcePath="u16" /><Payload Id="paypiqxaHpYZqx.9eDVjQrj1igLbRY" FilePath="1042\mbapreq.wxl" FileSize="2209" Hash="99CE8B42300EF656E6BD44F01766DC638CB0496F" Packaging="embedded" SourcePath="u17" /><Payload Id="payTO0YwZzxKpbqdrBVUcVRTu3BFe8" FilePath="1043\mbapreq.wxl" FileSize="2282" Hash="87117EE32E0004E25DDCEB1A7D417F3A02856A50" Packaging="embedded" SourcePath="u18" /><Payload Id="payIXg2ldBJukRzhqWolJVOEbTmF34" FilePath="1044\mbapreq.wxl" FileSize="2141" Hash="5AED841C6A870C3A8BAF8A10D00F887A781D0CF0" Packaging="embedded" SourcePath="u19" /><Payload Id="payOHIZbSkIvrpwKkkXI173tv3u3B4" FilePath="1045\mbapreq.wxl" FileSize="2338" Hash="07E37CBC59298F24A5C8C3B8FEB7A45DADF8CD07" Packaging="embedded" SourcePath="u20" /><Payload Id="payQRQ_UZl_R2UtV0xDXB2yeH2bg3E" FilePath="1046\mbapreq.wxl" FileSize="2118" Hash="AEC0CE51E8E335E9B86F1AC7E39CCD172B896582" Packaging="embedded" SourcePath="u21" /><Payload Id="payhrejLLBfc1i27iN._QPhQ4K337I" FilePath="1049\mbapreq.wxl" FileSize="2851" Hash="9628BADB173B171ED85D902634D9AA5D91FE9721" Packaging="embedded" SourcePath="u22" /><Payload Id="payqEzaDNzxB68vGp29jgDcCos6dvg" FilePath="1051\mbapreq.wxl" FileSize="2304" Hash="B584E8C0D7F9B7A1BB70BC00E42BFD35BED5D81D" Packaging="embedded" SourcePath="u23" /><Payload Id="paydz8Vk8xSTyYohgGXTSIxWGXL5.Q" FilePath="1053\mbapreq.wxl" FileSize="2102" Hash="67E93F555DBFEF8508E79F7CA8CE76B881308760" Packaging="embedded" SourcePath="u24" /><Payload Id="pay0HRUZTlbC3taSOffJBsEj92Br8Y" FilePath="1055\mbapreq.wxl" FileSize="2273" Hash="AEB8C90D66942A5CD73EA52A6F2ADD4F7D518A0D" Packaging="embedded" SourcePath="u25" /><Payload Id="payIvUOkc_EMH7laMFehefNolV8hZo" FilePath="1060\mbapreq.wxl" FileSize="2170" Hash="B1D4B71907B8BD82DD8B047404AF10FDBBE5CBA0" Packaging="embedded" SourcePath="u26" /><Payload Id="payLFhOb.rHuk4sW5CYAPMShG0NjGI" FilePath="2052\mbapreq.wxl" FileSize="1953" Hash="C8FB8982EC71C48D6EA021ADD9AAA7BCB0656281" Packaging="embedded" SourcePath="u27" /><Payload Id="payqIKCmERK7Nhxx_nNXvRxdKqKDbI" FilePath="2070\mbapreq.wxl" FileSize="2182" Hash="825F27A543907ED27E815EC67DFD48AF7BF5831E" Packaging="embedded" SourcePath="u28" /><Payload Id="payqeWUzIVaEqjuRXN0z8ECC3Y4tCc" FilePath="3082\mbapreq.wxl" FileSize="2369" Hash="39C07C31077AAFDC0DD208273AA41654CAD80FDD" Packaging="embedded" SourcePath="u29" /><Payload Id="paylfeHEjJSSTnNzY9QMZM2Ye3Ipy4" FilePath="mbapreq.dll" FileSize="245760" Hash="6499FA21D178131DDE13A4EF44ABEC32E91D65D4" Packaging="embedded" SourcePath="u31" /><Payload Id="payDPxs6uy8nbky.R7zhir2RRAfc.c" FilePath="WixToolset.Mba.Host.dll" FileSize="11264" Hash="9E6452891E401EB211DD41550A09FDF98EC0992F" Packaging="embedded" SourcePath="u32" /><Payload Id="uxTxMXPVMXwQrPTMIGa5WGt93w0Ns" FilePath="BootstrapperApplicationData.xml" FileSize="14292" Hash="CDF09A0723F4F33C13670BBAFCFFA7E660E15DFC" Packaging="embedded" SourcePath="u33" /><Payload Id="uxYRbgitOs0K878jn5L_z7LdJ21KI" FilePath="BundleExtensionData.xml" FileSize="252" Hash="86688B13D3364ADB90BBA552F544D4D546AFD63D" Packaging="embedded" SourcePath="u34" /></UX><Payload Id="NetFx48Web" FilePath="redist\ndp48-web.exe" FileSize="1479400" Hash="5A84A8E612E270E27D0061D58DB6B470153BE1F9" DownloadUrl="https://go.microsoft.com/fwlink/?LinkId=2085155" Packaging="external" SourcePath="redist\ndp48-web.exe" /><Payload Id="PackageA" FilePath="PackageAv1.msi" FileSize="32768" Hash="2369B16B7219B3C834DFBC5D2AF8B2EF8803D43D" Packaging="external" SourcePath="PackageAv1.msi" /><Payload Id="PatchA" FilePath="PatchA.msp" FileSize="20480" Hash="FABC6C18E4A778E127E84CDF67F93A291CAEC8BB" Packaging="external" SourcePath="PatchA.msp" /><RollbackBoundary Id="WixDefaultBoundary" Vital="yes" Transaction="no" /><Registration Id="{22D1DDBA-284D-40A7-BD14-95EA07906F21}" ExecutableName="BundleA.exe" PerMachine="yes" Tag="" Version="1.0.0.0" ProviderKey="{22D1DDBA-284D-40A7-BD14-95EA07906F21}"><Arp Register="yes" DisplayName="~SlipstreamTests - BundleA" DisplayVersion="1.0.0.0" /></Registration><Chain><ExePackage Id="NetFx48Web" Cache="keep" CacheId="5A84A8E612E270E27D0061D58DB6B470153BE1F9" InstallSize="1479400" Size="1479400" PerMachine="yes" Permanent="yes" Vital="yes" RollbackBoundaryForward="WixDefaultBoundary" LogPathVariable="NetFx48WebLog" RollbackLogPathVariable="WixBundleRollbackLog_NetFx48Web" DetectCondition="NETFRAMEWORK45 >= 528040" InstallArguments="/q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx48WebLog].html"" UninstallArguments="/uninstall /q /norestart /ChainingPackage "[WixBundleName]" /log "[NetFx48WebLog].html"" RepairArguments="/q /norestart /repair /ChainingPackage "[WixBundleName]" /log "[NetFx48WebLog].html"" Repairable="yes" Protocol="netfx4"><PayloadRef Id="NetFx48Web" /></ExePackage><MsiPackage Id="PackageA" Cache="keep" CacheId="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}v1.0.0.0" InstallSize="2103" Size="32768" PerMachine="yes" Permanent="no" Vital="yes" LogPathVariable="WixBundleLog_PackageA" RollbackLogPathVariable="WixBundleRollbackLog_PackageA" ProductCode="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Language="1033" Version="1.0.0.0" UpgradeCode="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}"><MsiProperty Id="ARPSYSTEMCOMPONENT" Value="1" /><MsiProperty Id="MSIFASTINSTALL" Value="7" /><SlipstreamMsp Id="PatchA" /><Provides Key="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Version="1.0.0.0" DisplayName="~SlipstreamTests - PackageA" /><RelatedPackage Id="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}" MaxVersion="1.0.0.0" MaxInclusive="no" OnlyDetect="no" LangInclusive="no"><Language Id="1033" /></RelatedPackage><RelatedPackage Id="{DB87BB66-FE5D-4293-81AC-EE313D3F864B}" MinVersion="1.0.0.0" MinInclusive="no" OnlyDetect="yes" LangInclusive="no"><Language Id="1033" /></RelatedPackage><PayloadRef Id="PackageA" /></MsiPackage><MspPackage Id="PatchA" Cache="keep" CacheId="{0A5113E3-06A5-4CE0-8E83-9EB42F6764A6}" InstallSize="20480" Size="20480" PerMachine="yes" Permanent="no" Vital="yes" RollbackBoundaryBackward="WixDefaultBoundary" LogPathVariable="WixBundleLog_PatchA" RollbackLogPathVariable="WixBundleRollbackLog_PatchA" PatchCode="{0A5113E3-06A5-4CE0-8E83-9EB42F6764A6}" PatchXml="<?xml version="1.0" encoding="utf-16"?><MsiPatch xmlns="http://www.microsoft.com/msi/patch_applicability.xsd" SchemaVersion="1.0.0.0" PatchGUID="{0A5113E3-06A5-4CE0-8E83-9EB42F6764A6}" MinMsiVersion="5" TargetsRTM="true"><TargetProduct MinMsiVersion="500"><TargetProductCode Validate="true">{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}</TargetProductCode><TargetVersion Validate="true" ComparisonType="Equal" ComparisonFilter="MajorMinorUpdate">1.0.0.0</TargetVersion><UpdatedVersion>1.0.1.0</UpdatedVersion><TargetLanguage Validate="false">1033</TargetLanguage><UpdatedLanguages>1033</UpdatedLanguages><UpgradeCode Validate="true">{DB87BB66-FE5D-4293-81AC-EE313D3F864B}</UpgradeCode></TargetProduct><TargetProductCode>{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}</TargetProductCode></MsiPatch>"><Provides Key="{0A5113E3-06A5-4CE0-8E83-9EB42F6764A6}" DisplayName="SlipstreamTests - Patch A" /><PayloadRef Id="PatchA" /></MspPackage></Chain><PatchTargetCode TargetCode="{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}" Product="yes" /><CommandLine Variables="upperCase" /></BurnManifest> \ No newline at end of file | ||
diff --git a/src/burn/test/BurnUnitTest/VariableTest.cpp b/src/burn/test/BurnUnitTest/VariableTest.cpp index 5c9dce03..055d63d9 100644 --- a/src/burn/test/BurnUnitTest/VariableTest.cpp +++ b/src/burn/test/BurnUnitTest/VariableTest.cpp | |||
| @@ -92,6 +92,7 @@ namespace Bootstrapper | |||
| 92 | L" <Variable Id='Var5' Type='string' Value='' Hidden='no' Persisted='no' />" | 92 | L" <Variable Id='Var5' Type='string' Value='' Hidden='no' Persisted='no' />" |
| 93 | L" <Variable Id='Var6' Type='formatted' Value='[Formatted]' Hidden='no' Persisted='no' />" | 93 | L" <Variable Id='Var6' Type='formatted' Value='[Formatted]' Hidden='no' Persisted='no' />" |
| 94 | L" <Variable Id='Formatted' Type='formatted' Value='supersecret' Hidden='yes' Persisted='no' />" | 94 | L" <Variable Id='Formatted' Type='formatted' Value='supersecret' Hidden='yes' Persisted='no' />" |
| 95 | L" <CommandLine Variables='upperCase' />" | ||
| 95 | L"</Bundle>"; | 96 | L"</Bundle>"; |
| 96 | 97 | ||
| 97 | hr = VariableInitialize(&variables); | 98 | hr = VariableInitialize(&variables); |
| @@ -103,6 +104,8 @@ namespace Bootstrapper | |||
| 103 | hr = VariablesParseFromXml(&variables, pixeBundle); | 104 | hr = VariablesParseFromXml(&variables, pixeBundle); |
| 104 | TestThrowOnFailure(hr, L"Failed to parse variables from XML."); | 105 | TestThrowOnFailure(hr, L"Failed to parse variables from XML."); |
| 105 | 106 | ||
| 107 | Assert::Equal((int)BURN_VARIABLE_COMMAND_LINE_TYPE_UPPER_CASE, (int)variables.commandLineType); | ||
| 108 | |||
| 106 | // get and verify variable values | 109 | // get and verify variable values |
| 107 | Assert::Equal((int)BURN_VARIANT_TYPE_NUMERIC, VariableGetTypeHelper(&variables, L"Var1")); | 110 | Assert::Equal((int)BURN_VARIANT_TYPE_NUMERIC, VariableGetTypeHelper(&variables, L"Var1")); |
| 108 | Assert::Equal((int)BURN_VARIANT_TYPE_STRING, VariableGetTypeHelper(&variables, L"Var2")); | 111 | Assert::Equal((int)BURN_VARIANT_TYPE_STRING, VariableGetTypeHelper(&variables, L"Var2")); |
diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs b/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs index 2ff57c55..ef4ee49a 100644 --- a/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs +++ b/src/ext/Bal/test/WixToolsetTest.Bal/BalExtensionFixture.cs | |||
| @@ -6,6 +6,7 @@ namespace WixToolsetTest.Bal | |||
| 6 | using System.Linq; | 6 | using System.Linq; |
| 7 | using System.Xml; | 7 | using System.Xml; |
| 8 | using WixBuildTools.TestSupport; | 8 | using WixBuildTools.TestSupport; |
| 9 | using WixToolset.Bal; | ||
| 9 | using WixToolset.Core.TestPackage; | 10 | using WixToolset.Core.TestPackage; |
| 10 | using Xunit; | 11 | using Xunit; |
| 11 | 12 | ||
| @@ -76,7 +77,7 @@ namespace WixToolsetTest.Bal | |||
| 76 | 77 | ||
| 77 | var balOverridableVariables = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixStdbaOverridableVariable"); | 78 | var balOverridableVariables = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixStdbaOverridableVariable"); |
| 78 | var balOverridableVariable = (XmlNode)Assert.Single(balOverridableVariables); | 79 | var balOverridableVariable = (XmlNode)Assert.Single(balOverridableVariables); |
| 79 | Assert.Equal("<WixStdbaOverridableVariable Name='Test1' />", balOverridableVariable.GetTestXml()); | 80 | Assert.Equal("<WixStdbaOverridableVariable Name='TEST1' />", balOverridableVariable.GetTestXml()); |
| 80 | } | 81 | } |
| 81 | } | 82 | } |
| 82 | 83 | ||
| @@ -129,5 +130,29 @@ namespace WixToolsetTest.Bal | |||
| 129 | Assert.False(File.Exists(Path.Combine(intermediateFolder, "test.exe"))); | 130 | Assert.False(File.Exists(Path.Combine(intermediateFolder, "test.exe"))); |
| 130 | } | 131 | } |
| 131 | } | 132 | } |
| 133 | |||
| 134 | [Fact] | ||
| 135 | public void CantBuildUsingOverridableWrongCase() | ||
| 136 | { | ||
| 137 | using (var fs = new DisposableFileSystem()) | ||
| 138 | { | ||
| 139 | var baseFolder = fs.GetFolder(); | ||
| 140 | var bundleFile = Path.Combine(baseFolder, "bin", "test.exe"); | ||
| 141 | var bundleSourceFolder = TestData.Get(@"TestData\Overridable"); | ||
| 142 | var intermediateFolder = Path.Combine(baseFolder, "obj"); | ||
| 143 | var baFolderPath = Path.Combine(baseFolder, "ba"); | ||
| 144 | var extractFolderPath = Path.Combine(baseFolder, "extract"); | ||
| 145 | |||
| 146 | var compileResult = WixRunner.Execute(new[] | ||
| 147 | { | ||
| 148 | "build", | ||
| 149 | Path.Combine(bundleSourceFolder, "WrongCaseBundle.wxs"), | ||
| 150 | "-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"), | ||
| 151 | "-intermediateFolder", intermediateFolder, | ||
| 152 | "-o", bundleFile, | ||
| 153 | }); | ||
| 154 | Assert.Equal((int)BalErrors.Ids.NonUpperCaseOverridableVariable, compileResult.ExitCode); | ||
| 155 | } | ||
| 156 | } | ||
| 132 | } | 157 | } |
| 133 | } | 158 | } |
diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/Bundle.wxs b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/Bundle.wxs index 91380c69..83e0d5b0 100644 --- a/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/Bundle.wxs +++ b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/Bundle.wxs | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | <BootstrapperApplication> | 5 | <BootstrapperApplication> |
| 6 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> | 6 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> |
| 7 | </BootstrapperApplication> | 7 | </BootstrapperApplication> |
| 8 | <Variable Name="Test1" bal:Overridable="yes" /> | 8 | <Variable Name="TEST1" bal:Overridable="yes" /> |
| 9 | <Chain> | 9 | <Chain> |
| 10 | <ExePackage Permanent="yes" DetectCondition="none" SourceFile="runtimes\win-x86\native\wixnative.exe" /> | 10 | <ExePackage Permanent="yes" DetectCondition="none" SourceFile="runtimes\win-x86\native\wixnative.exe" /> |
| 11 | </Chain> | 11 | </Chain> |
diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs new file mode 100644 index 00000000..91380c69 --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.Bal/TestData/Overridable/WrongCaseBundle.wxs | |||
| @@ -0,0 +1,13 @@ | |||
| 1 | <?xml version="1.0" encoding="utf-8"?> | ||
| 2 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | ||
| 3 | xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> | ||
| 4 | <Bundle Name="WixStdBa" Version="1.0.0.0" Manufacturer="Example Corporation" UpgradeCode="75D5D534-E177-4689-AAE9-CAC1C39002C2"> | ||
| 5 | <BootstrapperApplication> | ||
| 6 | <bal:WixStandardBootstrapperApplication LicenseUrl="http://wixtoolset.org/about/license/" Theme="hyperlinkLicense" /> | ||
| 7 | </BootstrapperApplication> | ||
| 8 | <Variable Name="Test1" bal:Overridable="yes" /> | ||
| 9 | <Chain> | ||
| 10 | <ExePackage Permanent="yes" DetectCondition="none" SourceFile="runtimes\win-x86\native\wixnative.exe" /> | ||
| 11 | </Chain> | ||
| 12 | </Bundle> | ||
| 13 | </Wix> | ||
diff --git a/src/ext/Bal/test/WixToolsetTest.Bal/WixToolsetTest.Bal.csproj b/src/ext/Bal/test/WixToolsetTest.Bal/WixToolsetTest.Bal.csproj index f00a8eff..a59a4707 100644 --- a/src/ext/Bal/test/WixToolsetTest.Bal/WixToolsetTest.Bal.csproj +++ b/src/ext/Bal/test/WixToolsetTest.Bal/WixToolsetTest.Bal.csproj | |||
| @@ -9,11 +9,7 @@ | |||
| 9 | </PropertyGroup> | 9 | </PropertyGroup> |
| 10 | 10 | ||
| 11 | <ItemGroup> | 11 | <ItemGroup> |
| 12 | <Content Include="TestData\MBA\Bundle.wxs" CopyToOutputDirectory="PreserveNewest" /> | 12 | <Content Include="TestData\**" CopyToOutputDirectory="PreserveNewest" /> |
| 13 | <Content Include="TestData\Overridable\Bundle.wxs" CopyToOutputDirectory="PreserveNewest" /> | ||
| 14 | <Content Include="TestData\WixStdBa\Bundle.wxs" CopyToOutputDirectory="PreserveNewest" /> | ||
| 15 | <Content Include="TestData\WixStdBa\Data\test.msi" CopyToOutputDirectory="PreserveNewest" /> | ||
| 16 | <Content Include="TestData\WixStdBa\DisplayInternalUIConditionBundle.wxs" CopyToOutputDirectory="PreserveNewest" /> | ||
| 17 | </ItemGroup> | 13 | </ItemGroup> |
| 18 | 14 | ||
| 19 | <Target Name="CopyExtensions" AfterTargets="Build"> | 15 | <Target Name="CopyExtensions" AfterTargets="Build"> |
diff --git a/src/ext/Bal/wixext/BalBurnBackendExtension.cs b/src/ext/Bal/wixext/BalBurnBackendExtension.cs index c6a1e0c1..854b8b35 100644 --- a/src/ext/Bal/wixext/BalBurnBackendExtension.cs +++ b/src/ext/Bal/wixext/BalBurnBackendExtension.cs | |||
| @@ -31,6 +31,8 @@ namespace WixToolset.Bal | |||
| 31 | { | 31 | { |
| 32 | base.SymbolsFinalized(section); | 32 | base.SymbolsFinalized(section); |
| 33 | 33 | ||
| 34 | this.VerifyOverridableVariables(section); | ||
| 35 | |||
| 34 | var baSymbol = section.Symbols.OfType<WixBootstrapperApplicationDllSymbol>().SingleOrDefault(); | 36 | var baSymbol = section.Symbols.OfType<WixBootstrapperApplicationDllSymbol>().SingleOrDefault(); |
| 35 | var baId = baSymbol?.Id?.Id; | 37 | var baId = baSymbol?.Id?.Id; |
| 36 | if (null == baId) | 38 | if (null == baId) |
| @@ -118,6 +120,25 @@ namespace WixToolset.Bal | |||
| 118 | } | 120 | } |
| 119 | } | 121 | } |
| 120 | 122 | ||
| 123 | private void VerifyOverridableVariables(IntermediateSection section) | ||
| 124 | { | ||
| 125 | var bundleSymbol = section.Symbols.OfType<WixBundleSymbol>().Single(); | ||
| 126 | if (bundleSymbol.CommandLineVariables != WixBundleCommandLineVariables.UpperCase) | ||
| 127 | { | ||
| 128 | return; | ||
| 129 | } | ||
| 130 | |||
| 131 | var overridableVariableSymbols = section.Symbols.OfType<WixStdbaOverridableVariableSymbol>().ToList(); | ||
| 132 | foreach (var overridableVariableSymbol in overridableVariableSymbols) | ||
| 133 | { | ||
| 134 | var upperName = overridableVariableSymbol.Name.ToUpperInvariant(); | ||
| 135 | if (upperName != overridableVariableSymbol.Name) | ||
| 136 | { | ||
| 137 | this.Messaging.Write(BalErrors.NonUpperCaseOverridableVariable(overridableVariableSymbol.SourceLineNumbers, overridableVariableSymbol.Name, upperName)); | ||
| 138 | } | ||
| 139 | } | ||
| 140 | } | ||
| 141 | |||
| 121 | private void VerifyPrereqPackages(IntermediateSection section, bool isDNC) | 142 | private void VerifyPrereqPackages(IntermediateSection section, bool isDNC) |
| 122 | { | 143 | { |
| 123 | var prereqInfoSymbols = section.Symbols.OfType<WixMbaPrereqInformationSymbol>().ToList(); | 144 | var prereqInfoSymbols = section.Symbols.OfType<WixMbaPrereqInformationSymbol>().ToList(); |
diff --git a/src/ext/Bal/wixext/BalErrors.cs b/src/ext/Bal/wixext/BalErrors.cs index bc0186c1..e9f68b24 100644 --- a/src/ext/Bal/wixext/BalErrors.cs +++ b/src/ext/Bal/wixext/BalErrors.cs | |||
| @@ -38,6 +38,11 @@ namespace WixToolset.Bal | |||
| 38 | return Message(sourceLineNumbers, Ids.MultiplePrereqLicenses, "There may only be one package in the bundle that has either the PrereqLicenseFile attribute or the PrereqLicenseUrl attribute."); | 38 | return Message(sourceLineNumbers, Ids.MultiplePrereqLicenses, "There may only be one package in the bundle that has either the PrereqLicenseFile attribute or the PrereqLicenseUrl attribute."); |
| 39 | } | 39 | } |
| 40 | 40 | ||
| 41 | public static Message NonUpperCaseOverridableVariable(SourceLineNumber sourceLineNumbers, string name, string expectedName) | ||
| 42 | { | ||
| 43 | return Message(sourceLineNumbers, Ids.NonUpperCaseOverridableVariable, "Overridable variable '{0}' must be '{1}' with Bundle/@CommandLineVariables value 'upperCase'.", name, expectedName); | ||
| 44 | } | ||
| 45 | |||
| 41 | private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args) | 46 | private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args) |
| 42 | { | 47 | { |
| 43 | return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args); | 48 | return new Message(sourceLineNumber, MessageLevel.Error, (int)id, format, args); |
| @@ -56,6 +61,7 @@ namespace WixToolset.Bal | |||
| 56 | MultipleBAFunctions = 6804, | 61 | MultipleBAFunctions = 6804, |
| 57 | BAFunctionsPayloadRequiredInUXContainer = 6805, | 62 | BAFunctionsPayloadRequiredInUXContainer = 6805, |
| 58 | MissingDNCPrereq = 6806, | 63 | MissingDNCPrereq = 6806, |
| 64 | NonUpperCaseOverridableVariable = 6807, | ||
| 59 | } | 65 | } |
| 60 | } | 66 | } |
| 61 | } | 67 | } |
diff --git a/src/test/burn/TestData/VariableTests/BundleA/BundleA.wixproj b/src/test/burn/TestData/VariableTests/BundleA/BundleA.wixproj new file mode 100644 index 00000000..91049cee --- /dev/null +++ b/src/test/burn/TestData/VariableTests/BundleA/BundleA.wixproj | |||
| @@ -0,0 +1,17 @@ | |||
| 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 Sdk="WixToolset.Sdk"> | ||
| 3 | <PropertyGroup> | ||
| 4 | <OutputType>Bundle</OutputType> | ||
| 5 | <BA>hyperlinkLicense</BA> | ||
| 6 | <UpgradeCode>{DDB62589-C5AD-4E92-A697-EAD7D7C37C8D}</UpgradeCode> | ||
| 7 | </PropertyGroup> | ||
| 8 | <ItemGroup> | ||
| 9 | <Compile Include="..\..\Templates\Bundle.wxs" Link="Bundle.wxs" /> | ||
| 10 | </ItemGroup> | ||
| 11 | <ItemGroup> | ||
| 12 | <ProjectReference Include="..\PackageA\PackageA.wixproj" /> | ||
| 13 | </ItemGroup> | ||
| 14 | <ItemGroup> | ||
| 15 | <PackageReference Include="WixToolset.Bal.wixext" /> | ||
| 16 | </ItemGroup> | ||
| 17 | </Project> \ No newline at end of file | ||
diff --git a/src/test/burn/TestData/VariableTests/BundleA/BundleA.wxs b/src/test/burn/TestData/VariableTests/BundleA/BundleA.wxs new file mode 100644 index 00000000..f243c97d --- /dev/null +++ b/src/test/burn/TestData/VariableTests/BundleA/BundleA.wxs | |||
| @@ -0,0 +1,17 @@ | |||
| 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 | |||
| 3 | |||
| 4 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | ||
| 5 | xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> | ||
| 6 | <Fragment> | ||
| 7 | <PackageGroup Id="BundlePackages"> | ||
| 8 | <MsiPackage Id="PackageA" SourceFile="$(var.PackageA.TargetPath)"> | ||
| 9 | <MsiProperty Name="INSTALLLOCATION" Value="[INSTALLLOCATION]" /> | ||
| 10 | <MsiProperty Name="LICENSEKEY" Value="[LICENSEKEY]" /> | ||
| 11 | </MsiPackage> | ||
| 12 | </PackageGroup> | ||
| 13 | |||
| 14 | <Variable Name="INSTALLLOCATION" bal:Overridable="yes" /> | ||
| 15 | <Variable Name="LICENSEKEY" Hidden="yes" bal:Overridable="yes" /> | ||
| 16 | </Fragment> | ||
| 17 | </Wix> | ||
diff --git a/src/test/burn/TestData/VariableTests/BundleB/Bundle.wxs b/src/test/burn/TestData/VariableTests/BundleB/Bundle.wxs new file mode 100644 index 00000000..fb293d9b --- /dev/null +++ b/src/test/burn/TestData/VariableTests/BundleB/Bundle.wxs | |||
| @@ -0,0 +1,40 @@ | |||
| 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 | |||
| 3 | <?ifndef Version?> | ||
| 4 | <?define Version = 1.0.0.0?> | ||
| 5 | <?endif?> | ||
| 6 | |||
| 7 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> | ||
| 8 | <!-- CommandLineVariables should be the only thing different from the template --> | ||
| 9 | <Bundle Name="~$(var.TestGroupName) - $(var.BundleName)" Version="$(var.Version)" UpgradeCode="$(var.UpgradeCode)" Compressed="yes" CommandLineVariables="caseSensitive"> | ||
| 10 | <Log Prefix="~$(var.TestGroupName)_$(var.BundleName)" /> | ||
| 11 | |||
| 12 | <Variable Name="TestGroupName" Value="$(var.TestGroupName)" /> | ||
| 13 | |||
| 14 | <?ifdef SoftwareTag?> | ||
| 15 | <SoftwareTag Regid="regid.1995-08.com.example" InstallPath="[CommonAppDataFolder]regid.1995-08.com.example" /> | ||
| 16 | <?endif?> | ||
| 17 | |||
| 18 | <?ifndef BA?> | ||
| 19 | <!-- pulled in through the PackageGroupRef below --> | ||
| 20 | <?elseif $(var.BA) = "TestBAdnc"?> | ||
| 21 | <!-- pulled in through the PackageGroupRef below --> | ||
| 22 | <?elseif $(var.BA) = "hyperlinkLicense"?> | ||
| 23 | <BootstrapperApplication> | ||
| 24 | <bal:WixStandardBootstrapperApplication LicenseUrl="" Theme="hyperlinkLicense" /> | ||
| 25 | </BootstrapperApplication> | ||
| 26 | <?else?> | ||
| 27 | <BootstrapperApplicationRef Id="$(var.BA)" /> | ||
| 28 | <?endif?> | ||
| 29 | |||
| 30 | <Chain> | ||
| 31 | <?ifndef BA?> | ||
| 32 | <PackageGroupRef Id="TestBA" /> | ||
| 33 | <?elseif $(var.BA) = "TestBAdnc"?> | ||
| 34 | <PackageGroupRef Id="TestBAdnc" /> | ||
| 35 | <?endif?> | ||
| 36 | |||
| 37 | <PackageGroupRef Id="BundlePackages" /> | ||
| 38 | </Chain> | ||
| 39 | </Bundle> | ||
| 40 | </Wix> | ||
diff --git a/src/test/burn/TestData/VariableTests/BundleB/BundleB.wixproj b/src/test/burn/TestData/VariableTests/BundleB/BundleB.wixproj new file mode 100644 index 00000000..fa11100b --- /dev/null +++ b/src/test/burn/TestData/VariableTests/BundleB/BundleB.wixproj | |||
| @@ -0,0 +1,14 @@ | |||
| 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 Sdk="WixToolset.Sdk"> | ||
| 3 | <PropertyGroup> | ||
| 4 | <OutputType>Bundle</OutputType> | ||
| 5 | <BA>hyperlinkLicense</BA> | ||
| 6 | <UpgradeCode>{B735B6D2-9D4D-4E98-B464-946F7F62AFC8}</UpgradeCode> | ||
| 7 | </PropertyGroup> | ||
| 8 | <ItemGroup> | ||
| 9 | <ProjectReference Include="..\PackageA\PackageA.wixproj" /> | ||
| 10 | </ItemGroup> | ||
| 11 | <ItemGroup> | ||
| 12 | <PackageReference Include="WixToolset.Bal.wixext" /> | ||
| 13 | </ItemGroup> | ||
| 14 | </Project> \ No newline at end of file | ||
diff --git a/src/test/burn/TestData/VariableTests/BundleB/BundleB.wxs b/src/test/burn/TestData/VariableTests/BundleB/BundleB.wxs new file mode 100644 index 00000000..f243c97d --- /dev/null +++ b/src/test/burn/TestData/VariableTests/BundleB/BundleB.wxs | |||
| @@ -0,0 +1,17 @@ | |||
| 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 | |||
| 3 | |||
| 4 | <Wix xmlns="http://wixtoolset.org/schemas/v4/wxs" | ||
| 5 | xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal"> | ||
| 6 | <Fragment> | ||
| 7 | <PackageGroup Id="BundlePackages"> | ||
| 8 | <MsiPackage Id="PackageA" SourceFile="$(var.PackageA.TargetPath)"> | ||
| 9 | <MsiProperty Name="INSTALLLOCATION" Value="[INSTALLLOCATION]" /> | ||
| 10 | <MsiProperty Name="LICENSEKEY" Value="[LICENSEKEY]" /> | ||
| 11 | </MsiPackage> | ||
| 12 | </PackageGroup> | ||
| 13 | |||
| 14 | <Variable Name="INSTALLLOCATION" bal:Overridable="yes" /> | ||
| 15 | <Variable Name="LICENSEKEY" Hidden="yes" bal:Overridable="yes" /> | ||
| 16 | </Fragment> | ||
| 17 | </Wix> | ||
diff --git a/src/test/burn/TestData/VariableTests/PackageA/PackageA.wixproj b/src/test/burn/TestData/VariableTests/PackageA/PackageA.wixproj new file mode 100644 index 00000000..da99dfea --- /dev/null +++ b/src/test/burn/TestData/VariableTests/PackageA/PackageA.wixproj | |||
| @@ -0,0 +1,9 @@ | |||
| 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 Sdk="WixToolset.Sdk"> | ||
| 3 | <PropertyGroup> | ||
| 4 | <UpgradeCode>{7D70B3D9-968C-4599-9CB4-5A5D6CD17681}</UpgradeCode> | ||
| 5 | </PropertyGroup> | ||
| 6 | <ItemGroup> | ||
| 7 | <Compile Include="..\..\Templates\Package.wxs" Link="Package.wxs" /> | ||
| 8 | </ItemGroup> | ||
| 9 | </Project> \ No newline at end of file | ||
diff --git a/src/test/burn/WixToolsetTest.BurnE2E/VariableTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/VariableTests.cs new file mode 100644 index 00000000..fcec1df2 --- /dev/null +++ b/src/test/burn/WixToolsetTest.BurnE2E/VariableTests.cs | |||
| @@ -0,0 +1,52 @@ | |||
| 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 | |||
| 3 | namespace WixToolsetTest.BurnE2E | ||
| 4 | { | ||
| 5 | using System.Collections.Generic; | ||
| 6 | using System.IO; | ||
| 7 | using WixBuildTools.TestSupport; | ||
| 8 | using WixTestTools; | ||
| 9 | using WixToolset.Mba.Core; | ||
| 10 | using Xunit; | ||
| 11 | using Xunit.Abstractions; | ||
| 12 | |||
| 13 | public class VariableTests : BurnE2ETests | ||
| 14 | { | ||
| 15 | public VariableTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } | ||
| 16 | |||
| 17 | [Fact] | ||
| 18 | public void CanHideHiddenVariables() | ||
| 19 | { | ||
| 20 | var packageA = this.CreatePackageInstaller("PackageA"); | ||
| 21 | var bundleA = this.CreateBundleInstaller("BundleA"); | ||
| 22 | |||
| 23 | packageA.VerifyInstalled(false); | ||
| 24 | |||
| 25 | var logFilePath = bundleA.Install(0, "INSTALLLOCATION=nothingtoseehere", "licensekey=supersecretkey"); | ||
| 26 | bundleA.VerifyRegisteredAndInPackageCache(); | ||
| 27 | |||
| 28 | packageA.VerifyInstalled(true); | ||
| 29 | |||
| 30 | Assert.True(LogVerifier.MessageInLogFile(logFilePath, "INSTALLLOCATION=nothingtoseehere LICENSEKEY=*****")); | ||
| 31 | Assert.True(LogVerifier.MessageInLogFile(logFilePath, "INSTALLLOCATION=\"nothingtoseehere\" LICENSEKEY=\"*****\"")); | ||
| 32 | Assert.False(LogVerifier.MessageInLogFile(logFilePath, "supersecretkey")); | ||
| 33 | } | ||
| 34 | |||
| 35 | [Fact] | ||
| 36 | public void CanSupportCaseSensitiveVariables() | ||
| 37 | { | ||
| 38 | var packageA = this.CreatePackageInstaller("PackageA"); | ||
| 39 | var bundleB = this.CreateBundleInstaller("BundleB"); | ||
| 40 | |||
| 41 | packageA.VerifyInstalled(false); | ||
| 42 | |||
| 43 | var logFilePath = bundleB.Install(0, "InstallLocation=nothingtoseehere", "licensekey=supersecretkey"); | ||
| 44 | bundleB.VerifyRegisteredAndInPackageCache(); | ||
| 45 | |||
| 46 | packageA.VerifyInstalled(true); | ||
| 47 | |||
| 48 | Assert.True(LogVerifier.MessageInLogFile(logFilePath, "InstallLocation=nothingtoseehere licensekey=supersecretkey")); | ||
| 49 | Assert.True(LogVerifier.MessageInLogFile(logFilePath, "INSTALLLOCATION=\"\" LICENSEKEY=\"*****\"")); | ||
| 50 | } | ||
| 51 | } | ||
| 52 | } | ||
diff --git a/src/wix/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs b/src/wix/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs index 04b6b89b..764a38ab 100644 --- a/src/wix/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs +++ b/src/wix/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs | |||
| @@ -68,6 +68,8 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 68 | 68 | ||
| 69 | this.WriteBundleInfo(writer); | 69 | this.WriteBundleInfo(writer); |
| 70 | 70 | ||
| 71 | this.WriteCommandLineInfo(writer); | ||
| 72 | |||
| 71 | this.WritePackageInfo(writer); | 73 | this.WritePackageInfo(writer); |
| 72 | 74 | ||
| 73 | this.WriteFeatureInfo(writer); | 75 | this.WriteFeatureInfo(writer); |
| @@ -97,6 +99,23 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 97 | writer.WriteEndElement(); | 99 | writer.WriteEndElement(); |
| 98 | } | 100 | } |
| 99 | 101 | ||
| 102 | private void WriteCommandLineInfo(XmlTextWriter writer) | ||
| 103 | { | ||
| 104 | writer.WriteStartElement("CommandLine"); | ||
| 105 | |||
| 106 | switch (this.BundleSymbol.CommandLineVariables) | ||
| 107 | { | ||
| 108 | case WixBundleCommandLineVariables.UpperCase: | ||
| 109 | writer.WriteAttributeString("Variables", "upperCase"); | ||
| 110 | break; | ||
| 111 | case WixBundleCommandLineVariables.CaseSensitive: | ||
| 112 | writer.WriteAttributeString("Variables", "caseSensitive"); | ||
| 113 | break; | ||
| 114 | } | ||
| 115 | |||
| 116 | writer.WriteEndElement(); | ||
| 117 | } | ||
| 118 | |||
| 100 | private void WritePackageInfo(XmlTextWriter writer) | 119 | private void WritePackageInfo(XmlTextWriter writer) |
| 101 | { | 120 | { |
| 102 | foreach (var package in this.ChainPackages) | 121 | foreach (var package in this.ChainPackages) |
diff --git a/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs b/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs index 5a7241ab..27b1f234 100644 --- a/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs +++ b/src/wix/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs | |||
| @@ -617,6 +617,20 @@ namespace WixToolset.Core.Burn.Bundles | |||
| 617 | writer.WriteEndElement(); | 617 | writer.WriteEndElement(); |
| 618 | } | 618 | } |
| 619 | 619 | ||
| 620 | writer.WriteStartElement("CommandLine"); | ||
| 621 | |||
| 622 | switch (this.BundleSymbol.CommandLineVariables) | ||
| 623 | { | ||
| 624 | case WixBundleCommandLineVariables.UpperCase: | ||
| 625 | writer.WriteAttributeString("Variables", "upperCase"); | ||
| 626 | break; | ||
| 627 | case WixBundleCommandLineVariables.CaseSensitive: | ||
| 628 | writer.WriteAttributeString("Variables", "caseSensitive"); | ||
| 629 | break; | ||
| 630 | } | ||
| 631 | |||
| 632 | writer.WriteEndElement(); | ||
| 633 | |||
| 620 | writer.WriteEndDocument(); // </BurnManifest> | 634 | writer.WriteEndDocument(); // </BurnManifest> |
| 621 | } | 635 | } |
| 622 | } | 636 | } |
diff --git a/src/wix/WixToolset.Core/Compiler_Bundle.cs b/src/wix/WixToolset.Core/Compiler_Bundle.cs index 03f0ca0e..20af017d 100644 --- a/src/wix/WixToolset.Core/Compiler_Bundle.cs +++ b/src/wix/WixToolset.Core/Compiler_Bundle.cs | |||
| @@ -120,6 +120,7 @@ namespace WixToolset.Core | |||
| 120 | string aboutUrl = null; | 120 | string aboutUrl = null; |
| 121 | var compressed = YesNoDefaultType.Default; | 121 | var compressed = YesNoDefaultType.Default; |
| 122 | WixBundleAttributes attributes = 0; | 122 | WixBundleAttributes attributes = 0; |
| 123 | WixBundleCommandLineVariables commandLineVariables = WixBundleCommandLineVariables.UpperCase; | ||
| 123 | string helpTelephone = null; | 124 | string helpTelephone = null; |
| 124 | string helpUrl = null; | 125 | string helpUrl = null; |
| 125 | string inProgressName = null; | 126 | string inProgressName = null; |
| @@ -147,6 +148,21 @@ namespace WixToolset.Core | |||
| 147 | case "AboutUrl": | 148 | case "AboutUrl": |
| 148 | aboutUrl = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | 149 | aboutUrl = this.Core.GetAttributeValue(sourceLineNumbers, attrib); |
| 149 | break; | 150 | break; |
| 151 | case "CommandLineVariables": | ||
| 152 | var commandLineVariablesValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); | ||
| 153 | switch (commandLineVariablesValue) | ||
| 154 | { | ||
| 155 | case "upperCase": | ||
| 156 | commandLineVariables = WixBundleCommandLineVariables.UpperCase; | ||
| 157 | break; | ||
| 158 | case "caseSensitive": | ||
| 159 | commandLineVariables = WixBundleCommandLineVariables.CaseSensitive; | ||
| 160 | break; | ||
| 161 | default: | ||
| 162 | this.Core.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, commandLineVariablesValue, "upperCase", "caseSensitive")); | ||
| 163 | break; | ||
| 164 | } | ||
| 165 | break; | ||
| 150 | case "Compressed": | 166 | case "Compressed": |
| 151 | compressed = this.Core.GetAttributeYesNoDefaultValue(sourceLineNumbers, attrib); | 167 | compressed = this.Core.GetAttributeYesNoDefaultValue(sourceLineNumbers, attrib); |
| 152 | break; | 168 | break; |
| @@ -408,6 +424,7 @@ namespace WixToolset.Core | |||
| 408 | HelpUrl = helpUrl, | 424 | HelpUrl = helpUrl, |
| 409 | HelpTelephone = helpTelephone, | 425 | HelpTelephone = helpTelephone, |
| 410 | UpdateUrl = updateUrl, | 426 | UpdateUrl = updateUrl, |
| 427 | CommandLineVariables = commandLineVariables, | ||
| 411 | Compressed = YesNoDefaultType.Yes == compressed ? true : YesNoDefaultType.No == compressed ? (bool?)false : null, | 428 | Compressed = YesNoDefaultType.Yes == compressed ? true : YesNoDefaultType.No == compressed ? (bool?)false : null, |
| 412 | IconSourceFile = iconSourceFile, | 429 | IconSourceFile = iconSourceFile, |
| 413 | SplashScreenSourceFile = splashScreenSourceFile, | 430 | SplashScreenSourceFile = splashScreenSourceFile, |
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs index 0bea3af9..eee4c498 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/BundleFixture.cs | |||
| @@ -109,6 +109,10 @@ namespace WixToolsetTest.CoreIntegration | |||
| 109 | var extractedBextManifestData = File.ReadAllText(Path.Combine(baFolderPath, "BundleExtensionData.xml"), Encoding.UTF8); | 109 | var extractedBextManifestData = File.ReadAllText(Path.Combine(baFolderPath, "BundleExtensionData.xml"), Encoding.UTF8); |
| 110 | Assert.Equal(extractedBextManifestData, bextManifestData); | 110 | Assert.Equal(extractedBextManifestData, bextManifestData); |
| 111 | 111 | ||
| 112 | var commandLineElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:CommandLine"); | ||
| 113 | var commandLineElement = (XmlNode)Assert.Single(commandLineElements); | ||
| 114 | Assert.Equal("<CommandLine Variables='upperCase' />", commandLineElement.GetTestXml()); | ||
| 115 | |||
| 112 | var logElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Log"); | 116 | var logElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Log"); |
| 113 | var logElement = (XmlNode)Assert.Single(logElements); | 117 | var logElement = (XmlNode)Assert.Single(logElements); |
| 114 | Assert.Equal("<Log PathVariable='WixBundleLog' Prefix='~TestBundle' Extension='log' />", logElement.GetTestXml()); | 118 | Assert.Equal("<Log PathVariable='WixBundleLog' Prefix='~TestBundle' Extension='log' />", logElement.GetTestXml()); |
