aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-10-18 22:37:12 -0500
committerSean Hall <r.sean.hall@gmail.com>2020-10-24 20:17:06 -0500
commitc9d14eb51e4b8458fd5e2738fcc7d1c1129ad22e (patch)
tree4d0d29316adce60e5a568806b478fc3e4d88d134
parentdcf13e60f0b165a8942e7e7d98f5f0702f7d1e84 (diff)
downloadwix-c9d14eb51e4b8458fd5e2738fcc7d1c1129ad22e.tar.gz
wix-c9d14eb51e4b8458fd5e2738fcc7d1c1129ad22e.tar.bz2
wix-c9d14eb51e4b8458fd5e2738fcc7d1c1129ad22e.zip
WIXFEAT:6210 Change data type of versions to strings.
-rw-r--r--src/WixToolset.Mba.Core/BootstrapperApplication.cs24
-rw-r--r--src/WixToolset.Mba.Core/Engine.cs86
-rw-r--r--src/WixToolset.Mba.Core/EventArgs.cs36
-rw-r--r--src/WixToolset.Mba.Core/IBootstrapperApplication.cs12
-rw-r--r--src/WixToolset.Mba.Core/IBootstrapperEngine.cs5
-rw-r--r--src/WixToolset.Mba.Core/IEngine.cs19
-rw-r--r--src/WixToolset.Mba.Core/PackageInfo.cs4
-rw-r--r--src/balutil/BalBootstrapperEngine.cpp14
-rw-r--r--src/balutil/balutil.vcxproj8
-rw-r--r--src/balutil/inc/BalBaseBAFunctions.h12
-rw-r--r--src/balutil/inc/BalBaseBootstrapperApplication.h12
-rw-r--r--src/balutil/inc/BalBaseBootstrapperApplicationProc.h12
-rw-r--r--src/balutil/inc/IBootstrapperApplication.h12
-rw-r--r--src/balutil/inc/IBootstrapperEngine.h5
-rw-r--r--src/balutil/packages.config4
-rw-r--r--src/bextutil/BextBundleExtensionEngine.cpp14
-rw-r--r--src/bextutil/bextutil.vcxproj8
-rw-r--r--src/bextutil/inc/IBundleExtensionEngine.h5
-rw-r--r--src/bextutil/packages.config4
-rw-r--r--src/mbanative/mbanative.vcxproj8
-rw-r--r--src/mbanative/packages.config4
21 files changed, 185 insertions, 123 deletions
diff --git a/src/WixToolset.Mba.Core/BootstrapperApplication.cs b/src/WixToolset.Mba.Core/BootstrapperApplication.cs
index 9ee909dc..472c553a 100644
--- a/src/WixToolset.Mba.Core/BootstrapperApplication.cs
+++ b/src/WixToolset.Mba.Core/BootstrapperApplication.cs
@@ -1130,9 +1130,9 @@ namespace WixToolset.Mba.Core
1130 return args.HResult; 1130 return args.HResult;
1131 } 1131 }
1132 1132
1133 int IBootstrapperApplication.OnDetectForwardCompatibleBundle(string wzBundleId, RelationType relationType, string wzBundleTag, bool fPerMachine, long version, ref bool fCancel, ref bool fIgnoreBundle) 1133 int IBootstrapperApplication.OnDetectForwardCompatibleBundle(string wzBundleId, RelationType relationType, string wzBundleTag, bool fPerMachine, string wzVersion, ref bool fCancel, ref bool fIgnoreBundle)
1134 { 1134 {
1135 DetectForwardCompatibleBundleEventArgs args = new DetectForwardCompatibleBundleEventArgs(wzBundleId, relationType, wzBundleTag, fPerMachine, version, fCancel, fIgnoreBundle); 1135 DetectForwardCompatibleBundleEventArgs args = new DetectForwardCompatibleBundleEventArgs(wzBundleId, relationType, wzBundleTag, fPerMachine, wzVersion, fCancel, fIgnoreBundle);
1136 this.OnDetectForwardCompatibleBundle(args); 1136 this.OnDetectForwardCompatibleBundle(args);
1137 1137
1138 fCancel = args.Cancel; 1138 fCancel = args.Cancel;
@@ -1150,9 +1150,9 @@ namespace WixToolset.Mba.Core
1150 return args.HResult; 1150 return args.HResult;
1151 } 1151 }
1152 1152
1153 int IBootstrapperApplication.OnDetectUpdate(string wzUpdateLocation, long dw64Size, long dw64Version, string wzTitle, string wzSummary, string wzContentType, string wzContent, ref bool fCancel, ref bool fStopProcessingUpdates) 1153 int IBootstrapperApplication.OnDetectUpdate(string wzUpdateLocation, long dw64Size, string wzVersion, string wzTitle, string wzSummary, string wzContentType, string wzContent, ref bool fCancel, ref bool fStopProcessingUpdates)
1154 { 1154 {
1155 DetectUpdateEventArgs args = new DetectUpdateEventArgs(wzUpdateLocation, dw64Size, dw64Version, wzTitle, wzSummary, wzContentType, wzContent, fCancel, fStopProcessingUpdates); 1155 DetectUpdateEventArgs args = new DetectUpdateEventArgs(wzUpdateLocation, dw64Size, wzVersion, wzTitle, wzSummary, wzContentType, wzContent, fCancel, fStopProcessingUpdates);
1156 this.OnDetectUpdate(args); 1156 this.OnDetectUpdate(args);
1157 1157
1158 fCancel = args.Cancel; 1158 fCancel = args.Cancel;
@@ -1169,9 +1169,9 @@ namespace WixToolset.Mba.Core
1169 return args.HResult; 1169 return args.HResult;
1170 } 1170 }
1171 1171
1172 int IBootstrapperApplication.OnDetectRelatedBundle(string wzProductCode, RelationType relationType, string wzBundleTag, bool fPerMachine, long version, RelatedOperation operation, ref bool fCancel) 1172 int IBootstrapperApplication.OnDetectRelatedBundle(string wzProductCode, RelationType relationType, string wzBundleTag, bool fPerMachine, string wzVersion, RelatedOperation operation, ref bool fCancel)
1173 { 1173 {
1174 DetectRelatedBundleEventArgs args = new DetectRelatedBundleEventArgs(wzProductCode, relationType, wzBundleTag, fPerMachine, version, operation, fCancel); 1174 DetectRelatedBundleEventArgs args = new DetectRelatedBundleEventArgs(wzProductCode, relationType, wzBundleTag, fPerMachine, wzVersion, operation, fCancel);
1175 this.OnDetectRelatedBundle(args); 1175 this.OnDetectRelatedBundle(args);
1176 1176
1177 fCancel = args.Cancel; 1177 fCancel = args.Cancel;
@@ -1187,18 +1187,18 @@ namespace WixToolset.Mba.Core
1187 return args.HResult; 1187 return args.HResult;
1188 } 1188 }
1189 1189
1190 int IBootstrapperApplication.OnDetectCompatibleMsiPackage(string wzPackageId, string wzCompatiblePackageId, long dw64CompatiblePackageVersion, ref bool fCancel) 1190 int IBootstrapperApplication.OnDetectCompatibleMsiPackage(string wzPackageId, string wzCompatiblePackageId, string wzCompatiblePackageVersion, ref bool fCancel)
1191 { 1191 {
1192 DetectCompatibleMsiPackageEventArgs args = new DetectCompatibleMsiPackageEventArgs(wzPackageId, wzCompatiblePackageId, dw64CompatiblePackageVersion, fCancel); 1192 DetectCompatibleMsiPackageEventArgs args = new DetectCompatibleMsiPackageEventArgs(wzPackageId, wzCompatiblePackageId, wzCompatiblePackageVersion, fCancel);
1193 this.OnDetectCompatibleMsiPackage(args); 1193 this.OnDetectCompatibleMsiPackage(args);
1194 1194
1195 fCancel = args.Cancel; 1195 fCancel = args.Cancel;
1196 return args.HResult; 1196 return args.HResult;
1197 } 1197 }
1198 1198
1199 int IBootstrapperApplication.OnDetectRelatedMsiPackage(string wzPackageId, string wzUpgradeCode, string wzProductCode, bool fPerMachine, long version, RelatedOperation operation, ref bool fCancel) 1199 int IBootstrapperApplication.OnDetectRelatedMsiPackage(string wzPackageId, string wzUpgradeCode, string wzProductCode, bool fPerMachine, string wzVersion, RelatedOperation operation, ref bool fCancel)
1200 { 1200 {
1201 DetectRelatedMsiPackageEventArgs args = new DetectRelatedMsiPackageEventArgs(wzPackageId, wzUpgradeCode, wzProductCode, fPerMachine, version, operation, fCancel); 1201 DetectRelatedMsiPackageEventArgs args = new DetectRelatedMsiPackageEventArgs(wzPackageId, wzUpgradeCode, wzProductCode, fPerMachine, wzVersion, operation, fCancel);
1202 this.OnDetectRelatedMsiPackage(args); 1202 this.OnDetectRelatedMsiPackage(args);
1203 1203
1204 fCancel = args.Cancel; 1204 fCancel = args.Cancel;
@@ -1268,9 +1268,9 @@ namespace WixToolset.Mba.Core
1268 return args.HResult; 1268 return args.HResult;
1269 } 1269 }
1270 1270
1271 int IBootstrapperApplication.OnPlanCompatibleMsiPackageBegin(string wzPackageId, string wzCompatiblePackageId, long dw64CompatiblePackageVersion, RequestState recommendedState, ref RequestState pRequestedState, ref bool fCancel) 1271 int IBootstrapperApplication.OnPlanCompatibleMsiPackageBegin(string wzPackageId, string wzCompatiblePackageId, string wzCompatiblePackageVersion, RequestState recommendedState, ref RequestState pRequestedState, ref bool fCancel)
1272 { 1272 {
1273 PlanCompatibleMsiPackageBeginEventArgs args = new PlanCompatibleMsiPackageBeginEventArgs(wzPackageId, wzCompatiblePackageId, dw64CompatiblePackageVersion, recommendedState, pRequestedState, fCancel); 1273 PlanCompatibleMsiPackageBeginEventArgs args = new PlanCompatibleMsiPackageBeginEventArgs(wzPackageId, wzCompatiblePackageId, wzCompatiblePackageVersion, recommendedState, pRequestedState, fCancel);
1274 this.OnPlanCompatibleMsiPackageBegin(args); 1274 this.OnPlanCompatibleMsiPackageBegin(args);
1275 1275
1276 pRequestedState = args.State; 1276 pRequestedState = args.State;
diff --git a/src/WixToolset.Mba.Core/Engine.cs b/src/WixToolset.Mba.Core/Engine.cs
index 98427cfa..e3ad097a 100644
--- a/src/WixToolset.Mba.Core/Engine.cs
+++ b/src/WixToolset.Mba.Core/Engine.cs
@@ -178,15 +178,21 @@ namespace WixToolset.Mba.Core
178 } 178 }
179 } 179 }
180 180
181 public Version GetVariableVersion(string name) 181 public string GetVariableVersion(string name)
182 { 182 {
183 int ret = this.engine.GetVariableVersion(name, out long value); 183 int length;
184 if (NativeMethods.S_OK != ret) 184 IntPtr pUniString = this.getVersionVariable(name, out length);
185 try
185 { 186 {
186 throw new Win32Exception(ret); 187 return Marshal.PtrToStringUni(pUniString, length);
188 }
189 finally
190 {
191 if (IntPtr.Zero != pUniString)
192 {
193 Marshal.FreeCoTaskMem(pUniString);
194 }
187 } 195 }
188
189 return LongToVersion(value);
190 } 196 }
191 197
192 public void LaunchApprovedExe(IntPtr hwndParent, string approvedExeForElevationId, string arguments) 198 public void LaunchApprovedExe(IntPtr hwndParent, string approvedExeForElevationId, string arguments)
@@ -224,12 +230,12 @@ namespace WixToolset.Mba.Core
224 this.engine.SetDownloadSource(packageOrContainerId, payloadId, url, user, password); 230 this.engine.SetDownloadSource(packageOrContainerId, payloadId, url, user, password);
225 } 231 }
226 232
227 public void SetVariable(string name, long value) 233 public void SetVariableNumeric(string name, long value)
228 { 234 {
229 this.engine.SetVariableNumeric(name, value); 235 this.engine.SetVariableNumeric(name, value);
230 } 236 }
231 237
232 public void SetVariable(string name, SecureString value, bool formatted) 238 public void SetVariableString(string name, SecureString value, bool formatted)
233 { 239 {
234 IntPtr pValue = Marshal.SecureStringToCoTaskMemUnicode(value); 240 IntPtr pValue = Marshal.SecureStringToCoTaskMemUnicode(value);
235 try 241 try
@@ -242,7 +248,7 @@ namespace WixToolset.Mba.Core
242 } 248 }
243 } 249 }
244 250
245 public void SetVariable(string name, string value, bool formatted) 251 public void SetVariableString(string name, string value, bool formatted)
246 { 252 {
247 IntPtr pValue = Marshal.StringToCoTaskMemUni(value); 253 IntPtr pValue = Marshal.StringToCoTaskMemUni(value);
248 try 254 try
@@ -255,10 +261,17 @@ namespace WixToolset.Mba.Core
255 } 261 }
256 } 262 }
257 263
258 public void SetVariable(string name, Version value) 264 public void SetVariableVersion(string name, string value)
259 { 265 {
260 long version = VersionToLong(value); 266 IntPtr pValue = Marshal.StringToCoTaskMemUni(value);
261 this.engine.SetVariableVersion(name, version); 267 try
268 {
269 this.engine.SetVariableVersion(name, pValue);
270 }
271 finally
272 {
273 Marshal.FreeCoTaskMem(pValue);
274 }
262 } 275 }
263 276
264 public int SendEmbeddedError(int errorCode, string message, int uiHint) 277 public int SendEmbeddedError(int errorCode, string message, int uiHint)
@@ -330,6 +343,55 @@ namespace WixToolset.Mba.Core
330 } 343 }
331 344
332 /// <summary> 345 /// <summary>
346 /// Gets the variable given by <paramref name="name"/> as a version string.
347 /// </summary>
348 /// <param name="name">The name of the variable to get.</param>
349 /// <param name="length">The length of the Unicode string.</param>
350 /// <returns>The value by a pointer to a Unicode string. Must be freed by Marshal.FreeCoTaskMem.</returns>
351 /// <exception cref="Exception">An error occurred getting the variable.</exception>
352 internal IntPtr getVersionVariable(string name, out int length)
353 {
354 int capacity = InitialBufferSize;
355 bool success = false;
356 IntPtr pValue = Marshal.AllocCoTaskMem(capacity * UnicodeEncoding.CharSize);
357 try
358 {
359 // Get the size of the buffer.
360 int ret = this.engine.GetVariableVersion(name, pValue, ref capacity);
361 if (NativeMethods.E_INSUFFICIENT_BUFFER == ret || NativeMethods.E_MOREDATA == ret)
362 {
363 // Don't need to add 1 for the null terminator, the engine already includes that.
364 pValue = Marshal.ReAllocCoTaskMem(pValue, capacity * UnicodeEncoding.CharSize);
365 ret = this.engine.GetVariableVersion(name, pValue, ref capacity);
366 }
367
368 if (NativeMethods.S_OK != ret)
369 {
370 throw Marshal.GetExceptionForHR(ret);
371 }
372
373 // The engine only returns the exact length of the string if the buffer was too small, so calculate it ourselves.
374 for (length = 0; length < capacity; ++length)
375 {
376 if (0 == Marshal.ReadInt16(pValue, length * UnicodeEncoding.CharSize))
377 {
378 break;
379 }
380 }
381
382 success = true;
383 return pValue;
384 }
385 finally
386 {
387 if (!success && IntPtr.Zero != pValue)
388 {
389 Marshal.FreeCoTaskMem(pValue);
390 }
391 }
392 }
393
394 /// <summary>
333 /// Initialize a SecureString with the given Unicode string. 395 /// Initialize a SecureString with the given Unicode string.
334 /// </summary> 396 /// </summary>
335 /// <param name="pUniString">Pointer to Unicode string.</param> 397 /// <param name="pUniString">Pointer to Unicode string.</param>
diff --git a/src/WixToolset.Mba.Core/EventArgs.cs b/src/WixToolset.Mba.Core/EventArgs.cs
index e739a853..71bd15e1 100644
--- a/src/WixToolset.Mba.Core/EventArgs.cs
+++ b/src/WixToolset.Mba.Core/EventArgs.cs
@@ -241,14 +241,14 @@ namespace WixToolset.Mba.Core
241 /// <param name="version">The version of the forward compatible bundle detected.</param> 241 /// <param name="version">The version of the forward compatible bundle detected.</param>
242 /// <param name="cancelRecommendation">The cancel recommendation from the engine.</param> 242 /// <param name="cancelRecommendation">The cancel recommendation from the engine.</param>
243 /// <param name="ignoreBundleRecommendation">The ignore recommendation from the engine.</param> 243 /// <param name="ignoreBundleRecommendation">The ignore recommendation from the engine.</param>
244 public DetectForwardCompatibleBundleEventArgs(string bundleId, RelationType relationType, string bundleTag, bool perMachine, long version, bool cancelRecommendation, bool ignoreBundleRecommendation) 244 public DetectForwardCompatibleBundleEventArgs(string bundleId, RelationType relationType, string bundleTag, bool perMachine, string version, bool cancelRecommendation, bool ignoreBundleRecommendation)
245 : base(cancelRecommendation) 245 : base(cancelRecommendation)
246 { 246 {
247 this.BundleId = bundleId; 247 this.BundleId = bundleId;
248 this.RelationType = relationType; 248 this.RelationType = relationType;
249 this.BundleTag = bundleTag; 249 this.BundleTag = bundleTag;
250 this.PerMachine = perMachine; 250 this.PerMachine = perMachine;
251 this.Version = Engine.LongToVersion(version); 251 this.Version = version;
252 this.IgnoreBundle = ignoreBundleRecommendation; 252 this.IgnoreBundle = ignoreBundleRecommendation;
253 } 253 }
254 254
@@ -275,7 +275,7 @@ namespace WixToolset.Mba.Core
275 /// <summary> 275 /// <summary>
276 /// Gets the version of the forward compatible bundle detected. 276 /// Gets the version of the forward compatible bundle detected.
277 /// </summary> 277 /// </summary>
278 public Version Version { get; private set; } 278 public string Version { get; private set; }
279 279
280 /// <summary> 280 /// <summary>
281 /// Instructs the engine whether to use the forward compatible bundle. 281 /// Instructs the engine whether to use the forward compatible bundle.
@@ -330,12 +330,12 @@ namespace WixToolset.Mba.Core
330 /// <param name="content">The content of the updated bundle.</param> 330 /// <param name="content">The content of the updated bundle.</param>
331 /// <param name="cancelRecommendation">The recommendation from the engine.</param> 331 /// <param name="cancelRecommendation">The recommendation from the engine.</param>
332 /// <param name="stopRecommendation">The recommendation from the engine.</param> 332 /// <param name="stopRecommendation">The recommendation from the engine.</param>
333 public DetectUpdateEventArgs(string updateLocation, long size, long version, string title, string summary, string contentType, string content, bool cancelRecommendation, bool stopRecommendation) 333 public DetectUpdateEventArgs(string updateLocation, long size, string version, string title, string summary, string contentType, string content, bool cancelRecommendation, bool stopRecommendation)
334 : base(cancelRecommendation) 334 : base(cancelRecommendation)
335 { 335 {
336 this.UpdateLocation = updateLocation; 336 this.UpdateLocation = updateLocation;
337 this.Size = size; 337 this.Size = size;
338 this.Version = Engine.LongToVersion(version); 338 this.Version = version;
339 this.Title = title; 339 this.Title = title;
340 this.Summary = summary; 340 this.Summary = summary;
341 this.ContentType = contentType; 341 this.ContentType = contentType;
@@ -356,7 +356,7 @@ namespace WixToolset.Mba.Core
356 /// <summary> 356 /// <summary>
357 /// Gets the version of the updated bundle. 357 /// Gets the version of the updated bundle.
358 /// </summary> 358 /// </summary>
359 public Version Version { get; private set; } 359 public string Version { get; private set; }
360 360
361 /// <summary> 361 /// <summary>
362 /// Gets the title of the the updated bundle. 362 /// Gets the title of the the updated bundle.
@@ -423,14 +423,14 @@ namespace WixToolset.Mba.Core
423 /// <param name="version">The version of the related bundle detected.</param> 423 /// <param name="version">The version of the related bundle detected.</param>
424 /// <param name="operation">The operation that will be taken on the detected bundle.</param> 424 /// <param name="operation">The operation that will be taken on the detected bundle.</param>
425 /// <param name="cancelRecommendation">The recommendation from the engine.</param> 425 /// <param name="cancelRecommendation">The recommendation from the engine.</param>
426 public DetectRelatedBundleEventArgs(string productCode, RelationType relationType, string bundleTag, bool perMachine, long version, RelatedOperation operation, bool cancelRecommendation) 426 public DetectRelatedBundleEventArgs(string productCode, RelationType relationType, string bundleTag, bool perMachine, string version, RelatedOperation operation, bool cancelRecommendation)
427 : base(cancelRecommendation) 427 : base(cancelRecommendation)
428 { 428 {
429 this.ProductCode = productCode; 429 this.ProductCode = productCode;
430 this.RelationType = relationType; 430 this.RelationType = relationType;
431 this.BundleTag = bundleTag; 431 this.BundleTag = bundleTag;
432 this.PerMachine = perMachine; 432 this.PerMachine = perMachine;
433 this.Version = Engine.LongToVersion(version); 433 this.Version = version;
434 this.Operation = operation; 434 this.Operation = operation;
435 } 435 }
436 436
@@ -457,7 +457,7 @@ namespace WixToolset.Mba.Core
457 /// <summary> 457 /// <summary>
458 /// Gets the version of the related bundle detected. 458 /// Gets the version of the related bundle detected.
459 /// </summary> 459 /// </summary>
460 public Version Version { get; private set; } 460 public string Version { get; private set; }
461 461
462 /// <summary> 462 /// <summary>
463 /// Gets the operation that will be taken on the detected bundle. 463 /// Gets the operation that will be taken on the detected bundle.
@@ -501,12 +501,12 @@ namespace WixToolset.Mba.Core
501 /// <param name="compatiblePackageId">The identity of the compatible package that was detected.</param> 501 /// <param name="compatiblePackageId">The identity of the compatible package that was detected.</param>
502 /// <param name="compatiblePackageVersion">The version of the compatible package that was detected.</param> 502 /// <param name="compatiblePackageVersion">The version of the compatible package that was detected.</param>
503 /// <param name="cancelRecommendation">The recommendation from the engine.</param> 503 /// <param name="cancelRecommendation">The recommendation from the engine.</param>
504 public DetectCompatibleMsiPackageEventArgs(string packageId, string compatiblePackageId, long compatiblePackageVersion, bool cancelRecommendation) 504 public DetectCompatibleMsiPackageEventArgs(string packageId, string compatiblePackageId, string compatiblePackageVersion, bool cancelRecommendation)
505 : base(cancelRecommendation) 505 : base(cancelRecommendation)
506 { 506 {
507 this.PackageId = packageId; 507 this.PackageId = packageId;
508 this.CompatiblePackageId = compatiblePackageId; 508 this.CompatiblePackageId = compatiblePackageId;
509 this.CompatiblePackageVersion = Engine.LongToVersion(compatiblePackageVersion); 509 this.CompatiblePackageVersion = compatiblePackageVersion;
510 } 510 }
511 511
512 /// <summary> 512 /// <summary>
@@ -522,7 +522,7 @@ namespace WixToolset.Mba.Core
522 /// <summary> 522 /// <summary>
523 /// Gets the version of the compatible package that was detected. 523 /// Gets the version of the compatible package that was detected.
524 /// </summary> 524 /// </summary>
525 public Version CompatiblePackageVersion { get; private set; } 525 public string CompatiblePackageVersion { get; private set; }
526 } 526 }
527 527
528 /// <summary> 528 /// <summary>
@@ -541,14 +541,14 @@ namespace WixToolset.Mba.Core
541 /// <param name="version">The version of the related package detected.</param> 541 /// <param name="version">The version of the related package detected.</param>
542 /// <param name="operation">The operation that will be taken on the detected package.</param> 542 /// <param name="operation">The operation that will be taken on the detected package.</param>
543 /// <param name="cancelRecommendation">The recommendation from the engine.</param> 543 /// <param name="cancelRecommendation">The recommendation from the engine.</param>
544 public DetectRelatedMsiPackageEventArgs(string packageId, string upgradeCode, string productCode, bool perMachine, long version, RelatedOperation operation, bool cancelRecommendation) 544 public DetectRelatedMsiPackageEventArgs(string packageId, string upgradeCode, string productCode, bool perMachine, string version, RelatedOperation operation, bool cancelRecommendation)
545 : base(cancelRecommendation) 545 : base(cancelRecommendation)
546 { 546 {
547 this.PackageId = packageId; 547 this.PackageId = packageId;
548 this.UpgradeCode = upgradeCode; 548 this.UpgradeCode = upgradeCode;
549 this.ProductCode = productCode; 549 this.ProductCode = productCode;
550 this.PerMachine = perMachine; 550 this.PerMachine = perMachine;
551 this.Version = Engine.LongToVersion(version); 551 this.Version = version;
552 this.Operation = operation; 552 this.Operation = operation;
553 } 553 }
554 554
@@ -575,7 +575,7 @@ namespace WixToolset.Mba.Core
575 /// <summary> 575 /// <summary>
576 /// Gets the version of the related package detected. 576 /// Gets the version of the related package detected.
577 /// </summary> 577 /// </summary>
578 public Version Version { get; private set; } 578 public string Version { get; private set; }
579 579
580 /// <summary> 580 /// <summary>
581 /// Gets the operation that will be taken on the detected package. 581 /// Gets the operation that will be taken on the detected package.
@@ -813,12 +813,12 @@ namespace WixToolset.Mba.Core
813 /// <param name="recommendedState">The recommended request state for the compatible package.</param> 813 /// <param name="recommendedState">The recommended request state for the compatible package.</param>
814 /// <param name="state">The requested state for the compatible package.</param> 814 /// <param name="state">The requested state for the compatible package.</param>
815 /// <param name="cancelRecommendation">The recommendation from the engine.</param> 815 /// <param name="cancelRecommendation">The recommendation from the engine.</param>
816 public PlanCompatibleMsiPackageBeginEventArgs(string packageId, string compatiblePackageId, long compatiblePackageVersion, RequestState recommendedState, RequestState state, bool cancelRecommendation) 816 public PlanCompatibleMsiPackageBeginEventArgs(string packageId, string compatiblePackageId, string compatiblePackageVersion, RequestState recommendedState, RequestState state, bool cancelRecommendation)
817 : base(cancelRecommendation) 817 : base(cancelRecommendation)
818 { 818 {
819 this.PackageId = packageId; 819 this.PackageId = packageId;
820 this.CompatiblePackageId = compatiblePackageId; 820 this.CompatiblePackageId = compatiblePackageId;
821 this.CompatiblePackageVersion = Engine.LongToVersion(compatiblePackageVersion); 821 this.CompatiblePackageVersion = compatiblePackageVersion;
822 this.RecommendedState = recommendedState; 822 this.RecommendedState = recommendedState;
823 this.State = state; 823 this.State = state;
824 } 824 }
@@ -836,7 +836,7 @@ namespace WixToolset.Mba.Core
836 /// <summary> 836 /// <summary>
837 /// Gets the version of the compatible package detected. 837 /// Gets the version of the compatible package detected.
838 /// </summary> 838 /// </summary>
839 public Version CompatiblePackageVersion { get; private set; } 839 public string CompatiblePackageVersion { get; private set; }
840 840
841 /// <summary> 841 /// <summary>
842 /// Gets the recommended state to use for the compatible package for planning. 842 /// Gets the recommended state to use for the compatible package for planning.
diff --git a/src/WixToolset.Mba.Core/IBootstrapperApplication.cs b/src/WixToolset.Mba.Core/IBootstrapperApplication.cs
index fa655282..0d79122d 100644
--- a/src/WixToolset.Mba.Core/IBootstrapperApplication.cs
+++ b/src/WixToolset.Mba.Core/IBootstrapperApplication.cs
@@ -45,7 +45,7 @@ namespace WixToolset.Mba.Core
45 [MarshalAs(UnmanagedType.U4)] RelationType relationType, 45 [MarshalAs(UnmanagedType.U4)] RelationType relationType,
46 [MarshalAs(UnmanagedType.LPWStr)] string wzBundleTag, 46 [MarshalAs(UnmanagedType.LPWStr)] string wzBundleTag,
47 [MarshalAs(UnmanagedType.Bool)] bool fPerMachine, 47 [MarshalAs(UnmanagedType.Bool)] bool fPerMachine,
48 [MarshalAs(UnmanagedType.U8)] long dw64Version, 48 [MarshalAs(UnmanagedType.LPWStr)] string wzVersion,
49 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel, 49 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel,
50 [MarshalAs(UnmanagedType.Bool)] ref bool fIgnoreBundle 50 [MarshalAs(UnmanagedType.Bool)] ref bool fIgnoreBundle
51 ); 51 );
@@ -63,7 +63,7 @@ namespace WixToolset.Mba.Core
63 int OnDetectUpdate( 63 int OnDetectUpdate(
64 [MarshalAs(UnmanagedType.LPWStr)] string wzUpdateLocation, 64 [MarshalAs(UnmanagedType.LPWStr)] string wzUpdateLocation,
65 [MarshalAs(UnmanagedType.U8)] long dw64Size, 65 [MarshalAs(UnmanagedType.U8)] long dw64Size,
66 [MarshalAs(UnmanagedType.U8)] long dw64Version, 66 [MarshalAs(UnmanagedType.LPWStr)] string wzVersion,
67 [MarshalAs(UnmanagedType.LPWStr)] string wzTitle, 67 [MarshalAs(UnmanagedType.LPWStr)] string wzTitle,
68 [MarshalAs(UnmanagedType.LPWStr)] string wzSummary, 68 [MarshalAs(UnmanagedType.LPWStr)] string wzSummary,
69 [MarshalAs(UnmanagedType.LPWStr)] string wzContentType, 69 [MarshalAs(UnmanagedType.LPWStr)] string wzContentType,
@@ -86,7 +86,7 @@ namespace WixToolset.Mba.Core
86 [MarshalAs(UnmanagedType.U4)] RelationType relationType, 86 [MarshalAs(UnmanagedType.U4)] RelationType relationType,
87 [MarshalAs(UnmanagedType.LPWStr)] string wzBundleTag, 87 [MarshalAs(UnmanagedType.LPWStr)] string wzBundleTag,
88 [MarshalAs(UnmanagedType.Bool)] bool fPerMachine, 88 [MarshalAs(UnmanagedType.Bool)] bool fPerMachine,
89 [MarshalAs(UnmanagedType.U8)] long dw64Version, 89 [MarshalAs(UnmanagedType.LPWStr)] string wzVersion,
90 [MarshalAs(UnmanagedType.U4)] RelatedOperation operation, 90 [MarshalAs(UnmanagedType.U4)] RelatedOperation operation,
91 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel 91 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel
92 ); 92 );
@@ -103,7 +103,7 @@ namespace WixToolset.Mba.Core
103 int OnDetectCompatibleMsiPackage( 103 int OnDetectCompatibleMsiPackage(
104 [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, 104 [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId,
105 [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageId, 105 [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageId,
106 [MarshalAs(UnmanagedType.U8)] long dw64CompatiblePackageVersion, 106 [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageVersion,
107 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel 107 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel
108 ); 108 );
109 109
@@ -114,7 +114,7 @@ namespace WixToolset.Mba.Core
114 [MarshalAs(UnmanagedType.LPWStr)] string wzUpgradeCode, 114 [MarshalAs(UnmanagedType.LPWStr)] string wzUpgradeCode,
115 [MarshalAs(UnmanagedType.LPWStr)] string wzProductCode, 115 [MarshalAs(UnmanagedType.LPWStr)] string wzProductCode,
116 [MarshalAs(UnmanagedType.Bool)] bool fPerMachine, 116 [MarshalAs(UnmanagedType.Bool)] bool fPerMachine,
117 [MarshalAs(UnmanagedType.U8)] long dw64Version, 117 [MarshalAs(UnmanagedType.LPWStr)] string wzVersion,
118 [MarshalAs(UnmanagedType.U4)] RelatedOperation operation, 118 [MarshalAs(UnmanagedType.U4)] RelatedOperation operation,
119 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel 119 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel
120 ); 120 );
@@ -181,7 +181,7 @@ namespace WixToolset.Mba.Core
181 int OnPlanCompatibleMsiPackageBegin( 181 int OnPlanCompatibleMsiPackageBegin(
182 [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId, 182 [MarshalAs(UnmanagedType.LPWStr)] string wzPackageId,
183 [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageId, 183 [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageId,
184 [MarshalAs(UnmanagedType.U8)] long dw64CompatiblePackageVersion, 184 [MarshalAs(UnmanagedType.LPWStr)] string wzCompatiblePackageVersion,
185 [MarshalAs(UnmanagedType.U4)] RequestState recommendedState, 185 [MarshalAs(UnmanagedType.U4)] RequestState recommendedState,
186 [MarshalAs(UnmanagedType.U4)] ref RequestState pRequestedState, 186 [MarshalAs(UnmanagedType.U4)] ref RequestState pRequestedState,
187 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel 187 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel
diff --git a/src/WixToolset.Mba.Core/IBootstrapperEngine.cs b/src/WixToolset.Mba.Core/IBootstrapperEngine.cs
index 85ca8693..584e0f6d 100644
--- a/src/WixToolset.Mba.Core/IBootstrapperEngine.cs
+++ b/src/WixToolset.Mba.Core/IBootstrapperEngine.cs
@@ -36,7 +36,8 @@ namespace WixToolset.Mba.Core
36 [PreserveSig] 36 [PreserveSig]
37 int GetVariableVersion( 37 int GetVariableVersion(
38 [MarshalAs(UnmanagedType.LPWStr)] string wzVariable, 38 [MarshalAs(UnmanagedType.LPWStr)] string wzVariable,
39 [MarshalAs(UnmanagedType.U8)] out long pqwValue 39 IntPtr wzValue,
40 [MarshalAs(UnmanagedType.U4)] ref int pcchValue
40 ); 41 );
41 42
42 [PreserveSig] 43 [PreserveSig]
@@ -112,7 +113,7 @@ namespace WixToolset.Mba.Core
112 113
113 void SetVariableVersion( 114 void SetVariableVersion(
114 [MarshalAs(UnmanagedType.LPWStr)] string wzVariable, 115 [MarshalAs(UnmanagedType.LPWStr)] string wzVariable,
115 [MarshalAs(UnmanagedType.U8)] long qwValue 116 IntPtr wzValue
116 ); 117 );
117 118
118 void CloseSplashScreen(); 119 void CloseSplashScreen();
diff --git a/src/WixToolset.Mba.Core/IEngine.cs b/src/WixToolset.Mba.Core/IEngine.cs
index 84d93bb0..b486e51d 100644
--- a/src/WixToolset.Mba.Core/IEngine.cs
+++ b/src/WixToolset.Mba.Core/IEngine.cs
@@ -96,7 +96,7 @@ namespace WixToolset.Mba.Core
96 /// Gets <see cref="Version"/> variables for the engine. 96 /// Gets <see cref="Version"/> variables for the engine.
97 /// </summary> 97 /// </summary>
98 /// <param name="name">The name of the variable.</param> 98 /// <param name="name">The name of the variable.</param>
99 Version GetVariableVersion(string name); 99 string GetVariableVersion(string name);
100 100
101 /// <summary> 101 /// <summary>
102 /// Launches a preapproved executable elevated. As long as the engine already elevated, there will be no UAC prompt. 102 /// Launches a preapproved executable elevated. As long as the engine already elevated, there will be no UAC prompt.
@@ -161,7 +161,7 @@ namespace WixToolset.Mba.Core
161 /// </summary> 161 /// </summary>
162 /// <param name="name">The name of the variable.</param> 162 /// <param name="name">The name of the variable.</param>
163 /// <param name="value">The value to set.</param> 163 /// <param name="value">The value to set.</param>
164 void SetVariable(string name, long value); 164 void SetVariableNumeric(string name, long value);
165 165
166 /// <summary> 166 /// <summary>
167 /// Sets string variables for the engine using SecureStrings. 167 /// Sets string variables for the engine using SecureStrings.
@@ -169,7 +169,7 @@ namespace WixToolset.Mba.Core
169 /// <param name="name">The name of the variable.</param> 169 /// <param name="name">The name of the variable.</param>
170 /// <param name="value">The value to set.</param> 170 /// <param name="value">The value to set.</param>
171 /// <param name="formatted">False if the value is a literal string.</param> 171 /// <param name="formatted">False if the value is a literal string.</param>
172 void SetVariable(string name, SecureString value, bool formatted); 172 void SetVariableString(string name, SecureString value, bool formatted);
173 173
174 /// <summary> 174 /// <summary>
175 /// Sets string variables for the engine. 175 /// Sets string variables for the engine.
@@ -177,21 +177,14 @@ namespace WixToolset.Mba.Core
177 /// <param name="name">The name of the variable.</param> 177 /// <param name="name">The name of the variable.</param>
178 /// <param name="value">The value to set.</param> 178 /// <param name="value">The value to set.</param>
179 /// <param name="formatted">False if the value is a literal string.</param> 179 /// <param name="formatted">False if the value is a literal string.</param>
180 void SetVariable(string name, string value, bool formatted); 180 void SetVariableString(string name, string value, bool formatted);
181 181
182 /// <summary> 182 /// <summary>
183 /// Sets <see cref="Version"/> variables for the engine. 183 /// Sets version variables for the engine.
184 ///
185 /// The <see cref="Version"/> class can keep track of when the build and revision fields are undefined, but the engine can't.
186 /// Therefore, the build and revision fields must be defined when setting a <see cref="Version"/> variable.
187 /// Use the NormalizeVersion method to make sure the engine can accept the Version.
188 ///
189 /// To keep track of versions without build or revision fields, use StringVariables instead.
190 /// </summary> 184 /// </summary>
191 /// <param name="name">The name of the variable.</param> 185 /// <param name="name">The name of the variable.</param>
192 /// <param name="value">The value to set.</param> 186 /// <param name="value">The value to set.</param>
193 /// <exception cref="OverflowException">The given <see cref="Version"/> was invalid.</exception> 187 void SetVariableVersion(string name, string value);
194 void SetVariable(string name, Version value);
195 188
196 /// <summary> 189 /// <summary>
197 /// Sends error message when embedded. 190 /// Sends error message when embedded.
diff --git a/src/WixToolset.Mba.Core/PackageInfo.cs b/src/WixToolset.Mba.Core/PackageInfo.cs
index d3199c08..d54438f5 100644
--- a/src/WixToolset.Mba.Core/PackageInfo.cs
+++ b/src/WixToolset.Mba.Core/PackageInfo.cs
@@ -159,11 +159,11 @@ namespace WixToolset.Mba.Core
159 } 159 }
160 } 160 }
161 161
162 public static IPackageInfo GetRelatedBundleAsPackage(string id, RelationType relationType, bool perMachine, Version version) 162 public static IPackageInfo GetRelatedBundleAsPackage(string id, RelationType relationType, bool perMachine, string version)
163 { 163 {
164 PackageInfo package = new PackageInfo(); 164 PackageInfo package = new PackageInfo();
165 package.Id = id; 165 package.Id = id;
166 package.Version = version.ToString(); 166 package.Version = version;
167 167
168 switch (relationType) 168 switch (relationType)
169 { 169 {
diff --git a/src/balutil/BalBootstrapperEngine.cpp b/src/balutil/BalBootstrapperEngine.cpp
index 6a0c66d6..b68ea7c2 100644
--- a/src/balutil/BalBootstrapperEngine.cpp
+++ b/src/balutil/BalBootstrapperEngine.cpp
@@ -133,26 +133,28 @@ public: // IBootstrapperEngine
133 133
134 virtual STDMETHODIMP GetVariableVersion( 134 virtual STDMETHODIMP GetVariableVersion(
135 __in_z LPCWSTR wzVariable, 135 __in_z LPCWSTR wzVariable,
136 __out DWORD64* pqwValue 136 __out_ecount_opt(*pcchValue) LPWSTR wzValue,
137 __inout DWORD* pcchValue
137 ) 138 )
138 { 139 {
139 HRESULT hr = S_OK; 140 HRESULT hr = S_OK;
140 BAENGINE_GETVARIABLEVERSION_ARGS args = { }; 141 BAENGINE_GETVARIABLEVERSION_ARGS args = { };
141 BAENGINE_GETVARIABLEVERSION_RESULTS results = { }; 142 BAENGINE_GETVARIABLEVERSION_RESULTS results = { };
142 143
143 ExitOnNull(pqwValue, hr, E_INVALIDARG, "pqwValue is required"); 144 ExitOnNull(pcchValue, hr, E_INVALIDARG, "pcchValue is required");
144 145
145 args.cbSize = sizeof(args); 146 args.cbSize = sizeof(args);
146 args.wzVariable = wzVariable; 147 args.wzVariable = wzVariable;
147 148
148 results.cbSize = sizeof(results); 149 results.cbSize = sizeof(results);
150 results.wzValue = wzValue;
151 results.cchValue = *pcchValue;
149 152
150 hr = m_pfnBAEngineProc(BOOTSTRAPPER_ENGINE_MESSAGE_GETVARIABLEVERSION, &args, &results, m_pvBAEngineProcContext); 153 hr = m_pfnBAEngineProc(BOOTSTRAPPER_ENGINE_MESSAGE_GETVARIABLEVERSION, &args, &results, m_pvBAEngineProcContext);
151 154
152 *pqwValue = results.qwValue; 155 *pcchValue = results.cchValue;
153 156
154 LExit: 157 LExit:
155 SecureZeroMemory(&results, sizeof(results));
156 return hr; 158 return hr;
157 } 159 }
158 160
@@ -410,7 +412,7 @@ public: // IBootstrapperEngine
410 412
411 virtual STDMETHODIMP SetVariableVersion( 413 virtual STDMETHODIMP SetVariableVersion(
412 __in_z LPCWSTR wzVariable, 414 __in_z LPCWSTR wzVariable,
413 __in DWORD64 qwValue 415 __in_z_opt LPCWSTR wzValue
414 ) 416 )
415 { 417 {
416 BAENGINE_SETVARIABLEVERSION_ARGS args = { }; 418 BAENGINE_SETVARIABLEVERSION_ARGS args = { };
@@ -418,7 +420,7 @@ public: // IBootstrapperEngine
418 420
419 args.cbSize = sizeof(args); 421 args.cbSize = sizeof(args);
420 args.wzVariable = wzVariable; 422 args.wzVariable = wzVariable;
421 args.qwValue = qwValue; 423 args.wzValue = wzValue;
422 424
423 results.cbSize = sizeof(results); 425 results.cbSize = sizeof(results);
424 426
diff --git a/src/balutil/balutil.vcxproj b/src/balutil/balutil.vcxproj
index 8697b5ab..7373040a 100644
--- a/src/balutil/balutil.vcxproj
+++ b/src/balutil/balutil.vcxproj
@@ -2,8 +2,8 @@
2<!-- 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<!-- 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. -->
3 3
4<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 4<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
5 <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props')" /> 5 <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props')" />
6 <Import Project="..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props')" /> 6 <Import Project="..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props')" />
7 7
8 <ItemGroup Label="ProjectConfigurations"> 8 <ItemGroup Label="ProjectConfigurations">
9 <ProjectConfiguration Include="Debug|ARM64"> 9 <ProjectConfiguration Include="Debug|ARM64">
@@ -98,8 +98,8 @@
98 <PropertyGroup> 98 <PropertyGroup>
99 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> 99 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
100 </PropertyGroup> 100 </PropertyGroup>
101 <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props'))" /> 101 <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props'))" />
102 <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props'))" /> 102 <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props'))" />
103 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets'))" /> 103 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets'))" />
104 </Target> 104 </Target>
105</Project> 105</Project>
diff --git a/src/balutil/inc/BalBaseBAFunctions.h b/src/balutil/inc/BalBaseBAFunctions.h
index 4e095fb8..72edadd5 100644
--- a/src/balutil/inc/BalBaseBAFunctions.h
+++ b/src/balutil/inc/BalBaseBAFunctions.h
@@ -103,7 +103,7 @@ public: // IBootstrapperApplication
103 __in BOOTSTRAPPER_RELATION_TYPE /*relationType*/, 103 __in BOOTSTRAPPER_RELATION_TYPE /*relationType*/,
104 __in_z LPCWSTR /*wzBundleTag*/, 104 __in_z LPCWSTR /*wzBundleTag*/,
105 __in BOOL /*fPerMachine*/, 105 __in BOOL /*fPerMachine*/,
106 __in DWORD64 /*dw64Version*/, 106 __in LPCWSTR /*wzVersion*/,
107 __inout BOOL* /*pfCancel*/, 107 __inout BOOL* /*pfCancel*/,
108 __inout BOOL* /*pfIgnoreBundle*/ 108 __inout BOOL* /*pfIgnoreBundle*/
109 ) 109 )
@@ -123,7 +123,7 @@ public: // IBootstrapperApplication
123 virtual STDMETHODIMP OnDetectUpdate( 123 virtual STDMETHODIMP OnDetectUpdate(
124 __in_z LPCWSTR /*wzUpdateLocation*/, 124 __in_z LPCWSTR /*wzUpdateLocation*/,
125 __in DWORD64 /*dw64Size*/, 125 __in DWORD64 /*dw64Size*/,
126 __in DWORD64 /*dw64Version*/, 126 __in LPCWSTR /*wzVersion*/,
127 __in_z LPCWSTR /*wzTitle*/, 127 __in_z LPCWSTR /*wzTitle*/,
128 __in_z LPCWSTR /*wzSummary*/, 128 __in_z LPCWSTR /*wzSummary*/,
129 __in_z LPCWSTR /*wzContentType*/, 129 __in_z LPCWSTR /*wzContentType*/,
@@ -148,7 +148,7 @@ public: // IBootstrapperApplication
148 __in BOOTSTRAPPER_RELATION_TYPE /*relationType*/, 148 __in BOOTSTRAPPER_RELATION_TYPE /*relationType*/,
149 __in_z LPCWSTR /*wzBundleTag*/, 149 __in_z LPCWSTR /*wzBundleTag*/,
150 __in BOOL /*fPerMachine*/, 150 __in BOOL /*fPerMachine*/,
151 __in DWORD64 /*dw64Version*/, 151 __in LPCWSTR /*wzVersion*/,
152 __in BOOTSTRAPPER_RELATED_OPERATION /*operation*/, 152 __in BOOTSTRAPPER_RELATED_OPERATION /*operation*/,
153 __inout BOOL* /*pfCancel*/ 153 __inout BOOL* /*pfCancel*/
154 ) 154 )
@@ -167,7 +167,7 @@ public: // IBootstrapperApplication
167 virtual STDMETHODIMP OnDetectCompatibleMsiPackage( 167 virtual STDMETHODIMP OnDetectCompatibleMsiPackage(
168 __in_z LPCWSTR /*wzPackageId*/, 168 __in_z LPCWSTR /*wzPackageId*/,
169 __in_z LPCWSTR /*wzCompatiblePackageId*/, 169 __in_z LPCWSTR /*wzCompatiblePackageId*/,
170 __in DWORD64 /*dw64CompatiblePackageVersion*/, 170 __in LPCWSTR /*wzCompatiblePackageVersion*/,
171 __inout BOOL* /*pfCancel*/ 171 __inout BOOL* /*pfCancel*/
172 ) 172 )
173 { 173 {
@@ -179,7 +179,7 @@ public: // IBootstrapperApplication
179 __in_z LPCWSTR /*wzUpgradeCode*/, 179 __in_z LPCWSTR /*wzUpgradeCode*/,
180 __in_z LPCWSTR /*wzProductCode*/, 180 __in_z LPCWSTR /*wzProductCode*/,
181 __in BOOL /*fPerMachine*/, 181 __in BOOL /*fPerMachine*/,
182 __in DWORD64 /*dw64Version*/, 182 __in LPCWSTR /*wzVersion*/,
183 __in BOOTSTRAPPER_RELATED_OPERATION /*operation*/, 183 __in BOOTSTRAPPER_RELATED_OPERATION /*operation*/,
184 __inout BOOL* /*pfCancel*/ 184 __inout BOOL* /*pfCancel*/
185 ) 185 )
@@ -254,7 +254,7 @@ public: // IBootstrapperApplication
254 virtual STDMETHODIMP OnPlanCompatibleMsiPackageBegin( 254 virtual STDMETHODIMP OnPlanCompatibleMsiPackageBegin(
255 __in_z LPCWSTR /*wzPackageId*/, 255 __in_z LPCWSTR /*wzPackageId*/,
256 __in_z LPCWSTR /*wzCompatiblePackageId*/, 256 __in_z LPCWSTR /*wzCompatiblePackageId*/,
257 __in DWORD64 /*dw64CompatiblePackageVersion*/, 257 __in LPCWSTR /*wzCompatiblePackageVersion*/,
258 __in BOOTSTRAPPER_REQUEST_STATE /*recommendedState*/, 258 __in BOOTSTRAPPER_REQUEST_STATE /*recommendedState*/,
259 __inout BOOTSTRAPPER_REQUEST_STATE* /*pRequestedState*/, 259 __inout BOOTSTRAPPER_REQUEST_STATE* /*pRequestedState*/,
260 __inout BOOL* /*pfCancel*/ 260 __inout BOOL* /*pfCancel*/
diff --git a/src/balutil/inc/BalBaseBootstrapperApplication.h b/src/balutil/inc/BalBaseBootstrapperApplication.h
index 1d014419..612faf54 100644
--- a/src/balutil/inc/BalBaseBootstrapperApplication.h
+++ b/src/balutil/inc/BalBaseBootstrapperApplication.h
@@ -101,7 +101,7 @@ public: // IBootstrapperApplication
101 __in BOOTSTRAPPER_RELATION_TYPE /*relationType*/, 101 __in BOOTSTRAPPER_RELATION_TYPE /*relationType*/,
102 __in_z LPCWSTR /*wzBundleTag*/, 102 __in_z LPCWSTR /*wzBundleTag*/,
103 __in BOOL /*fPerMachine*/, 103 __in BOOL /*fPerMachine*/,
104 __in DWORD64 /*dw64Version*/, 104 __in LPCWSTR /*wzVersion*/,
105 __inout BOOL* pfCancel, 105 __inout BOOL* pfCancel,
106 __inout BOOL* /*pfIgnoreBundle*/ 106 __inout BOOL* /*pfIgnoreBundle*/
107 ) 107 )
@@ -123,7 +123,7 @@ public: // IBootstrapperApplication
123 virtual STDMETHODIMP OnDetectUpdate( 123 virtual STDMETHODIMP OnDetectUpdate(
124 __in_z LPCWSTR /*wzUpdateLocation*/, 124 __in_z LPCWSTR /*wzUpdateLocation*/,
125 __in DWORD64 /*dw64Size*/, 125 __in DWORD64 /*dw64Size*/,
126 __in DWORD64 /*dw64Version*/, 126 __in LPCWSTR /*wzVersion*/,
127 __in_z LPCWSTR /*wzTitle*/, 127 __in_z LPCWSTR /*wzTitle*/,
128 __in_z LPCWSTR /*wzSummary*/, 128 __in_z LPCWSTR /*wzSummary*/,
129 __in_z LPCWSTR /*wzContentType*/, 129 __in_z LPCWSTR /*wzContentType*/,
@@ -149,7 +149,7 @@ public: // IBootstrapperApplication
149 __in BOOTSTRAPPER_RELATION_TYPE /*relationType*/, 149 __in BOOTSTRAPPER_RELATION_TYPE /*relationType*/,
150 __in_z LPCWSTR /*wzBundleTag*/, 150 __in_z LPCWSTR /*wzBundleTag*/,
151 __in BOOL /*fPerMachine*/, 151 __in BOOL /*fPerMachine*/,
152 __in DWORD64 /*dw64Version*/, 152 __in LPCWSTR /*wzVersion*/,
153 __in BOOTSTRAPPER_RELATED_OPERATION /*operation*/, 153 __in BOOTSTRAPPER_RELATED_OPERATION /*operation*/,
154 __inout BOOL* pfCancel 154 __inout BOOL* pfCancel
155 ) 155 )
@@ -170,7 +170,7 @@ public: // IBootstrapperApplication
170 virtual STDMETHODIMP OnDetectCompatibleMsiPackage( 170 virtual STDMETHODIMP OnDetectCompatibleMsiPackage(
171 __in_z LPCWSTR /*wzPackageId*/, 171 __in_z LPCWSTR /*wzPackageId*/,
172 __in_z LPCWSTR /*wzCompatiblePackageId*/, 172 __in_z LPCWSTR /*wzCompatiblePackageId*/,
173 __in DWORD64 /*dw64CompatiblePackageVersion*/, 173 __in LPCWSTR /*wzCompatiblePackageVersion*/,
174 __inout BOOL* pfCancel 174 __inout BOOL* pfCancel
175 ) 175 )
176 { 176 {
@@ -183,7 +183,7 @@ public: // IBootstrapperApplication
183 __in_z LPCWSTR /*wzUpgradeCode*/, 183 __in_z LPCWSTR /*wzUpgradeCode*/,
184 __in_z LPCWSTR /*wzProductCode*/, 184 __in_z LPCWSTR /*wzProductCode*/,
185 __in BOOL /*fPerMachine*/, 185 __in BOOL /*fPerMachine*/,
186 __in DWORD64 /*dw64Version*/, 186 __in LPCWSTR /*wzVersion*/,
187 __in BOOTSTRAPPER_RELATED_OPERATION /*operation*/, 187 __in BOOTSTRAPPER_RELATED_OPERATION /*operation*/,
188 __inout BOOL* pfCancel 188 __inout BOOL* pfCancel
189 ) 189 )
@@ -264,7 +264,7 @@ public: // IBootstrapperApplication
264 virtual STDMETHODIMP OnPlanCompatibleMsiPackageBegin( 264 virtual STDMETHODIMP OnPlanCompatibleMsiPackageBegin(
265 __in_z LPCWSTR /*wzPackageId*/, 265 __in_z LPCWSTR /*wzPackageId*/,
266 __in_z LPCWSTR /*wzCompatiblePackageId*/, 266 __in_z LPCWSTR /*wzCompatiblePackageId*/,
267 __in DWORD64 /*dw64CompatiblePackageVersion*/, 267 __in LPCWSTR /*wzCompatiblePackageVersion*/,
268 __in BOOTSTRAPPER_REQUEST_STATE /*recommendedState*/, 268 __in BOOTSTRAPPER_REQUEST_STATE /*recommendedState*/,
269 __inout BOOTSTRAPPER_REQUEST_STATE* /*pRequestedState*/, 269 __inout BOOTSTRAPPER_REQUEST_STATE* /*pRequestedState*/,
270 __inout BOOL* pfCancel 270 __inout BOOL* pfCancel
diff --git a/src/balutil/inc/BalBaseBootstrapperApplicationProc.h b/src/balutil/inc/BalBaseBootstrapperApplicationProc.h
index d25af1f7..7d5de8e4 100644
--- a/src/balutil/inc/BalBaseBootstrapperApplicationProc.h
+++ b/src/balutil/inc/BalBaseBootstrapperApplicationProc.h
@@ -78,7 +78,7 @@ static HRESULT BalBaseBAProcOnDetectForwardCompatibleBundle(
78 __inout BA_ONDETECTFORWARDCOMPATIBLEBUNDLE_RESULTS* pResults 78 __inout BA_ONDETECTFORWARDCOMPATIBLEBUNDLE_RESULTS* pResults
79 ) 79 )
80{ 80{
81 return pBA->OnDetectForwardCompatibleBundle(pArgs->wzBundleId, pArgs->relationType, pArgs->wzBundleTag, pArgs->fPerMachine, pArgs->dw64Version, &pResults->fCancel, &pResults->fIgnoreBundle); 81 return pBA->OnDetectForwardCompatibleBundle(pArgs->wzBundleId, pArgs->relationType, pArgs->wzBundleTag, pArgs->fPerMachine, pArgs->wzVersion, &pResults->fCancel, &pResults->fIgnoreBundle);
82} 82}
83 83
84static HRESULT BalBaseBAProcOnDetectUpdateBegin( 84static HRESULT BalBaseBAProcOnDetectUpdateBegin(
@@ -96,7 +96,7 @@ static HRESULT BalBaseBAProcOnDetectUpdate(
96 __inout BA_ONDETECTUPDATE_RESULTS* pResults 96 __inout BA_ONDETECTUPDATE_RESULTS* pResults
97 ) 97 )
98{ 98{
99 return pBA->OnDetectUpdate(pArgs->wzUpdateLocation, pArgs->dw64Size, pArgs->dw64Version, pArgs->wzTitle, pArgs->wzSummary, pArgs->wzContentType, pArgs->wzContent, &pResults->fCancel, &pResults->fStopProcessingUpdates); 99 return pBA->OnDetectUpdate(pArgs->wzUpdateLocation, pArgs->dw64Size, pArgs->wzVersion, pArgs->wzTitle, pArgs->wzSummary, pArgs->wzContentType, pArgs->wzContent, &pResults->fCancel, &pResults->fStopProcessingUpdates);
100} 100}
101 101
102static HRESULT BalBaseBAProcOnDetectUpdateComplete( 102static HRESULT BalBaseBAProcOnDetectUpdateComplete(
@@ -114,7 +114,7 @@ static HRESULT BalBaseBAProcOnDetectRelatedBundle(
114 __inout BA_ONDETECTRELATEDBUNDLE_RESULTS* pResults 114 __inout BA_ONDETECTRELATEDBUNDLE_RESULTS* pResults
115 ) 115 )
116{ 116{
117 return pBA->OnDetectRelatedBundle(pArgs->wzBundleId, pArgs->relationType, pArgs->wzBundleTag, pArgs->fPerMachine, pArgs->dw64Version, pArgs->operation, &pResults->fCancel); 117 return pBA->OnDetectRelatedBundle(pArgs->wzBundleId, pArgs->relationType, pArgs->wzBundleTag, pArgs->fPerMachine, pArgs->wzVersion, pArgs->operation, &pResults->fCancel);
118} 118}
119 119
120static HRESULT BalBaseBAProcOnDetectPackageBegin( 120static HRESULT BalBaseBAProcOnDetectPackageBegin(
@@ -132,7 +132,7 @@ static HRESULT BalBaseBAProcOnDetectCompatiblePackage(
132 __inout BA_ONDETECTCOMPATIBLEMSIPACKAGE_RESULTS* pResults 132 __inout BA_ONDETECTCOMPATIBLEMSIPACKAGE_RESULTS* pResults
133 ) 133 )
134{ 134{
135 return pBA->OnDetectCompatibleMsiPackage(pArgs->wzPackageId, pArgs->wzCompatiblePackageId, pArgs->dw64CompatiblePackageVersion, &pResults->fCancel); 135 return pBA->OnDetectCompatibleMsiPackage(pArgs->wzPackageId, pArgs->wzCompatiblePackageId, pArgs->wzCompatiblePackageVersion, &pResults->fCancel);
136} 136}
137 137
138static HRESULT BalBaseBAProcOnDetectRelatedMsiPackage( 138static HRESULT BalBaseBAProcOnDetectRelatedMsiPackage(
@@ -141,7 +141,7 @@ static HRESULT BalBaseBAProcOnDetectRelatedMsiPackage(
141 __inout BA_ONDETECTRELATEDMSIPACKAGE_RESULTS* pResults 141 __inout BA_ONDETECTRELATEDMSIPACKAGE_RESULTS* pResults
142 ) 142 )
143{ 143{
144 return pBA->OnDetectRelatedMsiPackage(pArgs->wzPackageId, pArgs->wzUpgradeCode, pArgs->wzProductCode, pArgs->fPerMachine, pArgs->dw64Version, pArgs->operation, &pResults->fCancel); 144 return pBA->OnDetectRelatedMsiPackage(pArgs->wzPackageId, pArgs->wzUpgradeCode, pArgs->wzProductCode, pArgs->fPerMachine, pArgs->wzVersion, pArgs->operation, &pResults->fCancel);
145} 145}
146 146
147static HRESULT BalBaseBAProcOnDetectTargetMsiPackage( 147static HRESULT BalBaseBAProcOnDetectTargetMsiPackage(
@@ -195,7 +195,7 @@ static HRESULT BalBaseBAProcOnPlanCompatibleMsiPackageBegin(
195 __inout BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_RESULTS* pResults 195 __inout BA_ONPLANCOMPATIBLEMSIPACKAGEBEGIN_RESULTS* pResults
196 ) 196 )
197{ 197{
198 return pBA->OnPlanCompatibleMsiPackageBegin(pArgs->wzPackageId, pArgs->wzCompatiblePackageId, pArgs->dw64CompatiblePackageVersion, pArgs->recommendedState, &pResults->requestedState, &pResults->fCancel); 198 return pBA->OnPlanCompatibleMsiPackageBegin(pArgs->wzPackageId, pArgs->wzCompatiblePackageId, pArgs->wzCompatiblePackageVersion, pArgs->recommendedState, &pResults->requestedState, &pResults->fCancel);
199} 199}
200 200
201static HRESULT BalBaseBAProcOnPlanCompatibleMsiPackageComplete( 201static HRESULT BalBaseBAProcOnPlanCompatibleMsiPackageComplete(
diff --git a/src/balutil/inc/IBootstrapperApplication.h b/src/balutil/inc/IBootstrapperApplication.h
index e17d2589..9cc19120 100644
--- a/src/balutil/inc/IBootstrapperApplication.h
+++ b/src/balutil/inc/IBootstrapperApplication.h
@@ -32,7 +32,7 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
32 __in BOOTSTRAPPER_RELATION_TYPE relationType, 32 __in BOOTSTRAPPER_RELATION_TYPE relationType,
33 __in_z LPCWSTR wzBundleTag, 33 __in_z LPCWSTR wzBundleTag,
34 __in BOOL fPerMachine, 34 __in BOOL fPerMachine,
35 __in DWORD64 dw64Version, 35 __in_z LPCWSTR wzVersion,
36 __inout BOOL* pfCancel, 36 __inout BOOL* pfCancel,
37 __inout BOOL* pfIgnoreBundle 37 __inout BOOL* pfIgnoreBundle
38 ) = 0; 38 ) = 0;
@@ -48,7 +48,7 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
48 STDMETHOD(OnDetectUpdate)( 48 STDMETHOD(OnDetectUpdate)(
49 __in_z_opt LPCWSTR wzUpdateLocation, 49 __in_z_opt LPCWSTR wzUpdateLocation,
50 __in DWORD64 dw64Size, 50 __in DWORD64 dw64Size,
51 __in DWORD64 dw64Version, 51 __in_z LPCWSTR wzVersion,
52 __in_z_opt LPCWSTR wzTitle, 52 __in_z_opt LPCWSTR wzTitle,
53 __in_z_opt LPCWSTR wzSummary, 53 __in_z_opt LPCWSTR wzSummary,
54 __in_z_opt LPCWSTR wzContentType, 54 __in_z_opt LPCWSTR wzContentType,
@@ -69,7 +69,7 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
69 __in BOOTSTRAPPER_RELATION_TYPE relationType, 69 __in BOOTSTRAPPER_RELATION_TYPE relationType,
70 __in_z LPCWSTR wzBundleTag, 70 __in_z LPCWSTR wzBundleTag,
71 __in BOOL fPerMachine, 71 __in BOOL fPerMachine,
72 __in DWORD64 dw64Version, 72 __in_z LPCWSTR wzVersion,
73 __in BOOTSTRAPPER_RELATED_OPERATION operation, 73 __in BOOTSTRAPPER_RELATED_OPERATION operation,
74 __inout BOOL* pfCancel 74 __inout BOOL* pfCancel
75 ) = 0; 75 ) = 0;
@@ -84,7 +84,7 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
84 STDMETHOD(OnDetectCompatibleMsiPackage)( 84 STDMETHOD(OnDetectCompatibleMsiPackage)(
85 __in_z LPCWSTR wzPackageId, 85 __in_z LPCWSTR wzPackageId,
86 __in_z LPCWSTR wzCompatiblePackageId, 86 __in_z LPCWSTR wzCompatiblePackageId,
87 __in DWORD64 dw64CompatiblePackageVersion, 87 __in_z LPCWSTR wzCompatiblePackageVersion,
88 __inout BOOL* pfCancel 88 __inout BOOL* pfCancel
89 ) = 0; 89 ) = 0;
90 90
@@ -94,7 +94,7 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
94 __in_z LPCWSTR wzUpgradeCode, 94 __in_z LPCWSTR wzUpgradeCode,
95 __in_z LPCWSTR wzProductCode, 95 __in_z LPCWSTR wzProductCode,
96 __in BOOL fPerMachine, 96 __in BOOL fPerMachine,
97 __in DWORD64 dw64Version, 97 __in_z LPCWSTR wzVersion,
98 __in BOOTSTRAPPER_RELATED_OPERATION operation, 98 __in BOOTSTRAPPER_RELATED_OPERATION operation,
99 __inout BOOL* pfCancel 99 __inout BOOL* pfCancel
100 ) = 0; 100 ) = 0;
@@ -156,7 +156,7 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
156 STDMETHOD(OnPlanCompatibleMsiPackageBegin)( 156 STDMETHOD(OnPlanCompatibleMsiPackageBegin)(
157 __in_z LPCWSTR wzPackageId, 157 __in_z LPCWSTR wzPackageId,
158 __in_z LPCWSTR wzCompatiblePackageId, 158 __in_z LPCWSTR wzCompatiblePackageId,
159 __in DWORD64 dw64CompatiblePackageVersion, 159 __in_z LPCWSTR wzCompatiblePackageVersion,
160 __in BOOTSTRAPPER_REQUEST_STATE recommendedState, 160 __in BOOTSTRAPPER_REQUEST_STATE recommendedState,
161 __inout BOOTSTRAPPER_REQUEST_STATE* pRequestedState, 161 __inout BOOTSTRAPPER_REQUEST_STATE* pRequestedState,
162 __inout BOOL* pfCancel 162 __inout BOOL* pfCancel
diff --git a/src/balutil/inc/IBootstrapperEngine.h b/src/balutil/inc/IBootstrapperEngine.h
index 3b648df1..cf055102 100644
--- a/src/balutil/inc/IBootstrapperEngine.h
+++ b/src/balutil/inc/IBootstrapperEngine.h
@@ -21,7 +21,8 @@ DECLARE_INTERFACE_IID_(IBootstrapperEngine, IUnknown, "6480D616-27A0-44D7-905B-8
21 21
22 STDMETHOD(GetVariableVersion)( 22 STDMETHOD(GetVariableVersion)(
23 __in_z LPCWSTR wzVariable, 23 __in_z LPCWSTR wzVariable,
24 __out DWORD64* pqwValue 24 __out_ecount_opt(*pcchValue) LPWSTR wzValue,
25 __inout DWORD* pcchValue
25 ) = 0; 26 ) = 0;
26 27
27 STDMETHOD(FormatString)( 28 STDMETHOD(FormatString)(
@@ -95,7 +96,7 @@ DECLARE_INTERFACE_IID_(IBootstrapperEngine, IUnknown, "6480D616-27A0-44D7-905B-8
95 96
96 STDMETHOD(SetVariableVersion)( 97 STDMETHOD(SetVariableVersion)(
97 __in_z LPCWSTR wzVariable, 98 __in_z LPCWSTR wzVariable,
98 __in DWORD64 qwValue 99 __in_z_opt LPCWSTR wzValue
99 ) = 0; 100 ) = 0;
100 101
101 STDMETHOD(CloseSplashScreen)() = 0; 102 STDMETHOD(CloseSplashScreen)() = 0;
diff --git a/src/balutil/packages.config b/src/balutil/packages.config
index 4db0b6a7..be1bf8e2 100644
--- a/src/balutil/packages.config
+++ b/src/balutil/packages.config
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="utf-8"?> 1<?xml version="1.0" encoding="utf-8"?>
2<packages> 2<packages>
3 <package id="Nerdbank.GitVersioning" version="2.1.65" targetFramework="native" developmentDependency="true" /> 3 <package id="Nerdbank.GitVersioning" version="2.1.65" targetFramework="native" developmentDependency="true" />
4 <package id="WixToolset.BootstrapperCore.Native" version="4.0.33" targetFramework="native" /> 4 <package id="WixToolset.BootstrapperCore.Native" version="4.0.37" targetFramework="native" />
5 <package id="WixToolset.DUtil" version="4.0.51" targetFramework="native" /> 5 <package id="WixToolset.DUtil" version="4.0.55" targetFramework="native" />
6</packages> \ No newline at end of file 6</packages> \ No newline at end of file
diff --git a/src/bextutil/BextBundleExtensionEngine.cpp b/src/bextutil/BextBundleExtensionEngine.cpp
index a78b3130..983782a9 100644
--- a/src/bextutil/BextBundleExtensionEngine.cpp
+++ b/src/bextutil/BextBundleExtensionEngine.cpp
@@ -185,26 +185,28 @@ public: // IBundleExtensionEngine
185 185
186 virtual STDMETHODIMP GetVariableVersion( 186 virtual STDMETHODIMP GetVariableVersion(
187 __in_z LPCWSTR wzVariable, 187 __in_z LPCWSTR wzVariable,
188 __out DWORD64* pqwValue 188 __out_ecount_opt(*pcchValue) LPWSTR wzValue,
189 __inout DWORD* pcchValue
189 ) 190 )
190 { 191 {
191 HRESULT hr = S_OK; 192 HRESULT hr = S_OK;
192 BUNDLE_EXTENSION_ENGINE_GETVARIABLEVERSION_ARGS args = { }; 193 BUNDLE_EXTENSION_ENGINE_GETVARIABLEVERSION_ARGS args = { };
193 BUNDLE_EXTENSION_ENGINE_GETVARIABLEVERSION_RESULTS results = { }; 194 BUNDLE_EXTENSION_ENGINE_GETVARIABLEVERSION_RESULTS results = { };
194 195
195 ExitOnNull(pqwValue, hr, E_INVALIDARG, "pqwValue is required"); 196 ExitOnNull(pcchValue, hr, E_INVALIDARG, "pcchValue is required");
196 197
197 args.cbSize = sizeof(args); 198 args.cbSize = sizeof(args);
198 args.wzVariable = wzVariable; 199 args.wzVariable = wzVariable;
199 200
200 results.cbSize = sizeof(results); 201 results.cbSize = sizeof(results);
202 results.wzValue = wzValue;
203 results.cchValue = *pcchValue;
201 204
202 hr = m_pfnBundleExtensionEngineProc(BUNDLE_EXTENSION_ENGINE_MESSAGE_GETVARIABLEVERSION, &args, &results, m_pvBundleExtensionEngineProcContext); 205 hr = m_pfnBundleExtensionEngineProc(BUNDLE_EXTENSION_ENGINE_MESSAGE_GETVARIABLEVERSION, &args, &results, m_pvBundleExtensionEngineProcContext);
203 206
204 *pqwValue = results.qwValue; 207 *pcchValue = results.cchValue;
205 208
206 LExit: 209 LExit:
207 SecureZeroMemory(&results, sizeof(results));
208 return hr; 210 return hr;
209 } 211 }
210 212
@@ -263,7 +265,7 @@ public: // IBundleExtensionEngine
263 265
264 virtual STDMETHODIMP SetVariableVersion( 266 virtual STDMETHODIMP SetVariableVersion(
265 __in_z LPCWSTR wzVariable, 267 __in_z LPCWSTR wzVariable,
266 __in DWORD64 qwValue 268 __in_z_opt LPCWSTR wzValue
267 ) 269 )
268 { 270 {
269 BUNDLE_EXTENSION_ENGINE_SETVARIABLEVERSION_ARGS args = { }; 271 BUNDLE_EXTENSION_ENGINE_SETVARIABLEVERSION_ARGS args = { };
@@ -271,7 +273,7 @@ public: // IBundleExtensionEngine
271 273
272 args.cbSize = sizeof(args); 274 args.cbSize = sizeof(args);
273 args.wzVariable = wzVariable; 275 args.wzVariable = wzVariable;
274 args.qwValue = qwValue; 276 args.wzValue = wzValue;
275 277
276 results.cbSize = sizeof(results); 278 results.cbSize = sizeof(results);
277 279
diff --git a/src/bextutil/bextutil.vcxproj b/src/bextutil/bextutil.vcxproj
index c27d8aee..00478a6e 100644
--- a/src/bextutil/bextutil.vcxproj
+++ b/src/bextutil/bextutil.vcxproj
@@ -2,8 +2,8 @@
2<!-- 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<!-- 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. -->
3 3
4<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 4<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
5 <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props')" /> 5 <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props')" />
6 <Import Project="..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props')" /> 6 <Import Project="..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props')" />
7 7
8 <ItemGroup Label="ProjectConfigurations"> 8 <ItemGroup Label="ProjectConfigurations">
9 <ProjectConfiguration Include="Debug|ARM64"> 9 <ProjectConfiguration Include="Debug|ARM64">
@@ -87,8 +87,8 @@
87 <PropertyGroup> 87 <PropertyGroup>
88 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> 88 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
89 </PropertyGroup> 89 </PropertyGroup>
90 <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props'))" /> 90 <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props'))" />
91 <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props'))" /> 91 <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props'))" />
92 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets'))" /> 92 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets'))" />
93 </Target> 93 </Target>
94</Project> 94</Project>
diff --git a/src/bextutil/inc/IBundleExtensionEngine.h b/src/bextutil/inc/IBundleExtensionEngine.h
index 7772b016..77ea2770 100644
--- a/src/bextutil/inc/IBundleExtensionEngine.h
+++ b/src/bextutil/inc/IBundleExtensionEngine.h
@@ -34,7 +34,8 @@ DECLARE_INTERFACE_IID_(IBundleExtensionEngine, IUnknown, "9D027A39-F6B6-42CC-973
34 34
35 STDMETHOD(GetVariableVersion)( 35 STDMETHOD(GetVariableVersion)(
36 __in_z LPCWSTR wzVariable, 36 __in_z LPCWSTR wzVariable,
37 __out DWORD64* pqwValue 37 __out_ecount_opt(*pcchValue) LPWSTR wzValue,
38 __inout DWORD* pcchValue
38 ) = 0; 39 ) = 0;
39 40
40 STDMETHOD(Log)( 41 STDMETHOD(Log)(
@@ -55,6 +56,6 @@ DECLARE_INTERFACE_IID_(IBundleExtensionEngine, IUnknown, "9D027A39-F6B6-42CC-973
55 56
56 STDMETHOD(SetVariableVersion)( 57 STDMETHOD(SetVariableVersion)(
57 __in_z LPCWSTR wzVariable, 58 __in_z LPCWSTR wzVariable,
58 __in DWORD64 qwValue 59 __in_z_opt LPCWSTR wzValue
59 ) = 0; 60 ) = 0;
60}; 61};
diff --git a/src/bextutil/packages.config b/src/bextutil/packages.config
index 4db0b6a7..be1bf8e2 100644
--- a/src/bextutil/packages.config
+++ b/src/bextutil/packages.config
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="utf-8"?> 1<?xml version="1.0" encoding="utf-8"?>
2<packages> 2<packages>
3 <package id="Nerdbank.GitVersioning" version="2.1.65" targetFramework="native" developmentDependency="true" /> 3 <package id="Nerdbank.GitVersioning" version="2.1.65" targetFramework="native" developmentDependency="true" />
4 <package id="WixToolset.BootstrapperCore.Native" version="4.0.33" targetFramework="native" /> 4 <package id="WixToolset.BootstrapperCore.Native" version="4.0.37" targetFramework="native" />
5 <package id="WixToolset.DUtil" version="4.0.51" targetFramework="native" /> 5 <package id="WixToolset.DUtil" version="4.0.55" targetFramework="native" />
6</packages> \ No newline at end of file 6</packages> \ No newline at end of file
diff --git a/src/mbanative/mbanative.vcxproj b/src/mbanative/mbanative.vcxproj
index 3fe9ef6b..3e1de28f 100644
--- a/src/mbanative/mbanative.vcxproj
+++ b/src/mbanative/mbanative.vcxproj
@@ -5,8 +5,8 @@
5 <Import Project="..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props" Condition="Exists('..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props')" /> 5 <Import Project="..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props" Condition="Exists('..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props')" />
6 <Import Project="..\..\packages\Microsoft.SourceLink.Common.1.0.0\build\Microsoft.SourceLink.Common.props" Condition="Exists('..\..\packages\Microsoft.SourceLink.Common.1.0.0\build\Microsoft.SourceLink.Common.props')" /> 6 <Import Project="..\..\packages\Microsoft.SourceLink.Common.1.0.0\build\Microsoft.SourceLink.Common.props" Condition="Exists('..\..\packages\Microsoft.SourceLink.Common.1.0.0\build\Microsoft.SourceLink.Common.props')" />
7 <Import Project="..\..\packages\Microsoft.Build.Tasks.Git.1.0.0\build\Microsoft.Build.Tasks.Git.props" Condition="Exists('..\..\packages\Microsoft.Build.Tasks.Git.1.0.0\build\Microsoft.Build.Tasks.Git.props')" /> 7 <Import Project="..\..\packages\Microsoft.Build.Tasks.Git.1.0.0\build\Microsoft.Build.Tasks.Git.props" Condition="Exists('..\..\packages\Microsoft.Build.Tasks.Git.1.0.0\build\Microsoft.Build.Tasks.Git.props')" />
8 <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props')" /> 8 <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props')" />
9 <Import Project="..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props')" /> 9 <Import Project="..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props')" />
10 10
11 <ItemGroup Label="ProjectConfigurations"> 11 <ItemGroup Label="ProjectConfigurations">
12 <ProjectConfiguration Include="Debug|ARM64"> 12 <ProjectConfiguration Include="Debug|ARM64">
@@ -94,7 +94,7 @@
94 <Error Condition="!Exists('..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props'))" /> 94 <Error Condition="!Exists('..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.props'))" />
95 <Error Condition="!Exists('..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.targets'))" /> 95 <Error Condition="!Exists('..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.SourceLink.GitHub.1.0.0\build\Microsoft.SourceLink.GitHub.targets'))" />
96 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets'))" /> 96 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets'))" />
97 <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.33\build\WixToolset.BootstrapperCore.Native.props'))" /> 97 <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.37\build\WixToolset.BootstrapperCore.Native.props'))" />
98 <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.51\build\WixToolset.DUtil.props'))" /> 98 <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.55\build\WixToolset.DUtil.props'))" />
99 </Target> 99 </Target>
100</Project> \ No newline at end of file 100</Project> \ No newline at end of file
diff --git a/src/mbanative/packages.config b/src/mbanative/packages.config
index 443e0094..3faa75d5 100644
--- a/src/mbanative/packages.config
+++ b/src/mbanative/packages.config
@@ -4,6 +4,6 @@
4 <package id="Microsoft.SourceLink.Common" version="1.0.0" targetFramework="native" developmentDependency="true" /> 4 <package id="Microsoft.SourceLink.Common" version="1.0.0" targetFramework="native" developmentDependency="true" />
5 <package id="Microsoft.SourceLink.GitHub" version="1.0.0" targetFramework="native" developmentDependency="true" /> 5 <package id="Microsoft.SourceLink.GitHub" version="1.0.0" targetFramework="native" developmentDependency="true" />
6 <package id="Nerdbank.GitVersioning" version="2.1.65" targetFramework="native" developmentDependency="true" /> 6 <package id="Nerdbank.GitVersioning" version="2.1.65" targetFramework="native" developmentDependency="true" />
7 <package id="WixToolset.BootstrapperCore.Native" version="4.0.33" targetFramework="native" /> 7 <package id="WixToolset.BootstrapperCore.Native" version="4.0.37" targetFramework="native" />
8 <package id="WixToolset.DUtil" version="4.0.51" targetFramework="native" /> 8 <package id="WixToolset.DUtil" version="4.0.55" targetFramework="native" />
9</packages> \ No newline at end of file 9</packages> \ No newline at end of file