@joebigelow / wix / commits / 62b32cd6

Replace OnResolveSource with OnCacheAcquireResolving. Update balretry to have a separate type for container vs payload.

Replace OnResolveSource with OnCacheAcquireResolving. Update balretry to have a separate type for container vs payload. #3640

Sean Hall committed Apr 19, 2021 at 17:32 UTC 62b32cd6f21292c73dae8d5cfcd3a1cb13a1fd7d
22 files changed +444 -291
src/WixToolset.Mba.Core/BootstrapperApplication.cs
+13 -11
@@ -146,7 +146,7 @@ namespace WixToolset.Mba.Core
146 public event EventHandler<CacheAcquireProgressEventArgs> CacheAcquireProgress;
147
148 /// <inheritdoc/>
149 - public event EventHandler<ResolveSourceEventArgs> ResolveSource;
149 + public event EventHandler<CacheAcquireResolvingEventArgs> CacheAcquireResolving;
150
151 /// <inheritdoc/>
152 public event EventHandler<CacheAcquireCompleteEventArgs> CacheAcquireComplete;
@@ -736,12 +736,12 @@ namespace WixToolset.Mba.Core
736 }
737
738 /// <summary>
739 - /// Called by the engine, raises the <see cref="ResolveSource"/> event.
739 + /// Called by the engine, raises the <see cref="CacheAcquireResolving"/> event.
740 /// </summary>
741 /// <param name="args">Additional arguments for this event.</param>
742 - protected virtual void OnResolveSource(ResolveSourceEventArgs args)
742 + protected virtual void OnCacheAcquireResolving(CacheAcquireResolvingEventArgs args)
743 {
744 - EventHandler<ResolveSourceEventArgs> handler = this.ResolveSource;
744 + EventHandler<CacheAcquireResolvingEventArgs> handler = this.CacheAcquireResolving;
745 if (null != handler)
746 {
747 handler(this, args);
@@ -1126,9 +1126,9 @@ namespace WixToolset.Mba.Core
1126 return args.HResult;
1127 }
1128
1129 - int IBootstrapperApplication.OnDetectBegin(bool fInstalled, int cPackages, ref bool fCancel)
1129 + int IBootstrapperApplication.OnDetectBegin(bool fCached, bool fInstalled, int cPackages, ref bool fCancel)
1130 {
1131 - DetectBeginEventArgs args = new DetectBeginEventArgs(fInstalled, cPackages, fCancel);
1131 + DetectBeginEventArgs args = new DetectBeginEventArgs(fCached, fInstalled, cPackages, fCancel);
1132 this.OnDetectBegin(args);
1133
1134 fCancel = args.Cancel;
@@ -1400,11 +1400,12 @@ namespace WixToolset.Mba.Core
1400 return args.HResult;
1401 }
1402
1403 - int IBootstrapperApplication.OnCacheAcquireBegin(string wzPackageOrContainerId, string wzPayloadId, CacheOperation operation, string wzSource, ref bool fCancel)
1403 + int IBootstrapperApplication.OnCacheAcquireBegin(string wzPackageOrContainerId, string wzPayloadId, string wzSource, string wzDownloadUrl, string wzPayloadContainerId, CacheOperation recommendation, ref CacheOperation action, ref bool fCancel)
1404 {
1405 - CacheAcquireBeginEventArgs args = new CacheAcquireBeginEventArgs(wzPackageOrContainerId, wzPayloadId, operation, wzSource, fCancel);
1405 + CacheAcquireBeginEventArgs args = new CacheAcquireBeginEventArgs(wzPackageOrContainerId, wzPayloadId, wzSource, wzDownloadUrl, wzPayloadContainerId, recommendation, action, fCancel);
1406 this.OnCacheAcquireBegin(args);
1407
1408 + action = args.Action;
1409 fCancel = args.Cancel;
1410 return args.HResult;
1411 }
@@ -1418,11 +1419,12 @@ namespace WixToolset.Mba.Core
1419 return args.HResult;
1420 }
1421
1421 - int IBootstrapperApplication.OnResolveSource(string wzPackageOrContainerId, string wzPayloadId, string wzLocalSource, string wzDownloadSource, BOOTSTRAPPER_RESOLVESOURCE_ACTION recommendation, ref BOOTSTRAPPER_RESOLVESOURCE_ACTION action, ref bool fCancel)
1422 + int IBootstrapperApplication.OnCacheAcquireResolving(string wzPackageOrContainerId, string wzPayloadId, string[] searchPaths, int cSearchPaths, bool fFoundLocal, int dwRecommendedSearchPath, string wzDownloadUrl, string wzPayloadContainerId, CacheResolveOperation recommendation, ref int dwChosenSearchPath, ref CacheResolveOperation action, ref bool fCancel)
1423 {
1423 - ResolveSourceEventArgs args = new ResolveSourceEventArgs(wzPackageOrContainerId, wzPayloadId, wzLocalSource, wzDownloadSource, action, recommendation, fCancel);
1424 - this.OnResolveSource(args);
1424 + CacheAcquireResolvingEventArgs args = new CacheAcquireResolvingEventArgs(wzPackageOrContainerId, wzPayloadId, searchPaths, fFoundLocal, dwRecommendedSearchPath, wzDownloadUrl, wzPayloadContainerId, recommendation, dwChosenSearchPath, action, fCancel);
1425 + this.OnCacheAcquireResolving(args);
1426
1427 + dwChosenSearchPath = args.ChosenSearchPath;
1428 action = args.Action;
1429 fCancel = args.Cancel;
1430 return args.HResult;
src/WixToolset.Mba.Core/EventArgs.cs
+87 -56
@@ -122,6 +122,31 @@ namespace WixToolset.Mba.Core
122 public T Action { get; set; }
123 }
124
125 + /// <summary>
126 + /// Base class for cancellable action BA <see cref="EventArgs"/> classes.
127 + /// </summary>
128 + [Serializable]
129 + public abstract class CancellableActionEventArgs<T> : CancellableHResultEventArgs
130 + {
131 + /// <summary />
132 + public CancellableActionEventArgs(bool cancelRecommendation, T recommendation, T action)
133 + : base(cancelRecommendation)
134 + {
135 + this.Recommendation = recommendation;
136 + this.Action = action;
137 + }
138 +
139 + /// <summary>
140 + /// Gets the recommended action from the engine.
141 + /// </summary>
142 + public T Recommendation { get; private set; }
143 +
144 + /// <summary>
145 + /// Gets or sets the action to be performed. This is passed back to the engine.
146 + /// </summary>
147 + public T Action { get; set; }
148 + }
149 +
150 /// <summary>
151 /// Additional arguments used when startup has begun.
152 /// </summary>
@@ -196,24 +221,25 @@ namespace WixToolset.Mba.Core
221 }
222
223 /// <summary>
199 - /// Additional arguments used when the overall detection phase has begun.
224 + /// Event arguments for <see cref="IDefaultBootstrapperApplication.DetectBegin"/>
225 /// </summary>
226 [Serializable]
227 public class DetectBeginEventArgs : CancellableHResultEventArgs
228 {
204 - /// <summary>
205 - /// Creates a new instance of the <see cref="DetectBeginEventArgs"/> class.
206 - /// </summary>
207 - /// <param name="installed">Specifies whether the bundle is installed.</param>
208 - /// <param name="packageCount">The number of packages to detect.</param>
209 - /// <param name="cancelRecommendation">The recommendation from the engine.</param>
210 - public DetectBeginEventArgs(bool installed, int packageCount, bool cancelRecommendation)
229 + /// <summary />
230 + public DetectBeginEventArgs(bool cached, bool installed, int packageCount, bool cancelRecommendation)
231 : base(cancelRecommendation)
232 {
233 + this.Cached = cached;
234 this.Installed = installed;
235 this.PackageCount = packageCount;
236 }
237
238 + /// <summary>
239 + /// Gets whether the bundle is cached.
240 + /// </summary>
241 + public bool Cached { get; private set; }
242 +
243 /// <summary>
244 /// Gets whether the bundle is installed.
245 /// </summary>
@@ -290,6 +316,7 @@ namespace WixToolset.Mba.Core
316 : base(cancelRecommendation)
317 {
318 this.UpdateLocation = updateLocation;
319 + this.Skip = skipRecommendation;
320 }
321
322 /// <summary>
@@ -1242,6 +1269,8 @@ namespace WixToolset.Mba.Core
1269 /// <param name="forceKeepRegistration"></param>
1270 public UnregisterBeginEventArgs(bool keepRegistration, bool forceKeepRegistration)
1271 {
1272 + this.KeepRegistration = keepRegistration;
1273 + this.ForceKeepRegistration = forceKeepRegistration;
1274 }
1275
1276 /// <summary>
@@ -1288,21 +1317,20 @@ namespace WixToolset.Mba.Core
1317 }
1318
1319 /// <summary>
1291 - /// Additional arguments used when the engine begins to acquire containers or payloads.
1320 + /// EventArgs for <see cref="IDefaultBootstrapperApplication.CacheAcquireBegin"/>.
1321 /// </summary>
1322 [Serializable]
1294 - public class CacheAcquireBeginEventArgs : CancellableHResultEventArgs
1323 + public class CacheAcquireBeginEventArgs : CancellableActionEventArgs<CacheOperation>
1324 {
1296 - /// <summary>
1297 - /// Creates a new instance of the <see cref="CacheAcquireBeginEventArgs"/> class.
1298 - /// </summary>
1299 - public CacheAcquireBeginEventArgs(string packageOrContainerId, string payloadId, CacheOperation operation, string source, bool cancelRecommendation)
1300 - : base(cancelRecommendation)
1325 + /// <summary />
1326 + public CacheAcquireBeginEventArgs(string packageOrContainerId, string payloadId, string source, string downloadUrl, string payloadContainerId, CacheOperation recommendation, CacheOperation action, bool cancelRecommendation)
1327 + : base(cancelRecommendation, recommendation, action)
1328 {
1329 this.PackageOrContainerId = packageOrContainerId;
1330 this.PayloadId = payloadId;
1304 - this.Operation = operation;
1331 this.Source = source;
1332 + this.DownloadUrl = downloadUrl;
1333 + this.PayloadContainerId = payloadContainerId;
1334 }
1335
1336 /// <summary>
@@ -1316,25 +1344,28 @@ namespace WixToolset.Mba.Core
1344 public string PayloadId { get; private set; }
1345
1346 /// <summary>
1319 - /// Gets the cache acquire operation.
1347 + /// Gets the source of the container or payload.
1348 /// </summary>
1321 - public CacheOperation Operation { get; private set; }
1349 + public string Source { get; private set; }
1350
1351 /// <summary>
1324 - /// Gets the source of the container or payload.
1352 + /// Gets the optional URL to download container or payload.
1353 /// </summary>
1326 - public string Source { get; private set; }
1354 + public string DownloadUrl { get; private set; }
1355 +
1356 + /// <summary>
1357 + /// Gets the optional identity of the container that contains the payload being acquired.
1358 + /// </summary>
1359 + public string PayloadContainerId { get; private set; }
1360 }
1361
1362 /// <summary>
1330 - /// Additional arguments used when the engine acquires some part of a container or payload.
1363 + /// EventArgs for <see cref="IDefaultBootstrapperApplication.CacheAcquireProgress"/>.
1364 /// </summary>
1365 [Serializable]
1366 public class CacheAcquireProgressEventArgs : CancellableHResultEventArgs
1367 {
1335 - /// <summary>
1336 - /// Creates a new instance of the <see cref="CacheAcquireBeginEventArgs"/> class.
1337 - /// </summary>
1368 + /// <summary />
1369 public CacheAcquireProgressEventArgs(string packageOrContainerId, string payloadId, long progress, long total, int overallPercentage, bool cancelRecommendation)
1370 : base(cancelRecommendation)
1371 {
@@ -1372,14 +1403,12 @@ namespace WixToolset.Mba.Core
1403 }
1404
1405 /// <summary>
1375 - /// Additional arguments used when the engine completes the acquisition of a container or payload.
1406 + /// EventArgs for <see cref="IDefaultBootstrapperApplication.CacheAcquireComplete"/>.
1407 /// </summary>
1408 [Serializable]
1409 public class CacheAcquireCompleteEventArgs : ActionEventArgs<BOOTSTRAPPER_CACHEACQUIRECOMPLETE_ACTION>
1410 {
1380 - /// <summary>
1381 - /// Creates a new instance of the <see cref="CacheAcquireCompleteEventArgs"/> class.
1382 - /// </summary>
1411 + /// <summary />
1412 public CacheAcquireCompleteEventArgs(string packageOrContainerId, string payloadId, int hrStatus, BOOTSTRAPPER_CACHEACQUIRECOMPLETE_ACTION recommendation, BOOTSTRAPPER_CACHEACQUIRECOMPLETE_ACTION action)
1413 : base(hrStatus, recommendation, action)
1414 {
@@ -1729,62 +1758,64 @@ namespace WixToolset.Mba.Core
1758 }
1759
1760 /// <summary>
1732 - /// Additional arguments used by the engine to allow the BA to change the source
1733 - /// using <see cref="Engine.SetLocalSource"/> or <see cref="Engine.SetDownloadSource"/>.
1761 + /// EventArgs for <see cref="IDefaultBootstrapperApplication.CacheAcquireResolving"/>.
1762 /// </summary>
1763 [Serializable]
1736 - public class ResolveSourceEventArgs : CancellableHResultEventArgs
1764 + public class CacheAcquireResolvingEventArgs : CancellableActionEventArgs<CacheResolveOperation>
1765 {
1738 - /// <summary>
1739 - /// Creates a new instance of the <see cref="ResolveSourceEventArgs"/> class.
1740 - /// </summary>
1741 - /// <param name="packageOrContainerId">The identity of the package or container that requires source.</param>
1742 - /// <param name="payloadId">The identity of the payload that requires source.</param>
1743 - /// <param name="localSource">The current path used for source resolution.</param>
1744 - /// <param name="downloadSource">Optional URL to download container or payload.</param>
1745 - /// <param name="recommendation">The recommended action from the engine.</param>
1746 - /// <param name="action">The action to perform.</param>
1747 - /// <param name="cancelRecommendation">The recommendation from the engine.</param>
1748 - public ResolveSourceEventArgs(string packageOrContainerId, string payloadId, string localSource, string downloadSource, BOOTSTRAPPER_RESOLVESOURCE_ACTION recommendation, BOOTSTRAPPER_RESOLVESOURCE_ACTION action, bool cancelRecommendation)
1749 - : base(cancelRecommendation)
1766 + /// <summary />
1767 + public CacheAcquireResolvingEventArgs(string packageOrContainerId, string payloadId, string[] searchPaths, bool foundLocal, int recommendedSearchPath, string downloadUrl, string payloadContainerId, CacheResolveOperation recommendation, int chosenSearchPath, CacheResolveOperation action, bool cancel)
1768 + : base(cancel, recommendation, action)
1769 {
1770 this.PackageOrContainerId = packageOrContainerId;
1771 this.PayloadId = payloadId;
1753 - this.LocalSource = localSource;
1754 - this.DownloadSource = downloadSource;
1755 - this.Recommendation = recommendation;
1756 - this.Action = action;
1772 + this.SearchPaths = searchPaths;
1773 + this.FoundLocal = foundLocal;
1774 + this.RecommendedSearchPath = recommendedSearchPath;
1775 + this.DownloadUrl = downloadUrl;
1776 + this.PayloadContainerId = payloadContainerId;
1777 + this.ChosenSearchPath = chosenSearchPath;
1778 }
1779
1780 /// <summary>
1760 - /// Gets the identity of the package or container that requires source.
1781 + /// Gets the identity of the package or container that is being acquired.
1782 /// </summary>
1783 public string PackageOrContainerId { get; private set; }
1784
1785 /// <summary>
1765 - /// Gets the identity of the payload that requires source.
1786 + /// Gets the identity of the payload that is being acquired.
1787 /// </summary>
1788 public string PayloadId { get; private set; }
1789
1790 /// <summary>
1770 - /// Gets the current path used for source resolution.
1791 + /// Gets the search paths used for source resolution.
1792 /// </summary>
1772 - public string LocalSource { get; private set; }
1793 + public string[] SearchPaths { get; private set; }
1794 +
1795 + /// <summary>
1796 + /// Gets whether <see cref="RecommendedSearchPath"/> indicates that a file was found at that search path.
1797 + /// </summary>
1798 + public bool FoundLocal { get; private set; }
1799 +
1800 + /// <summary>
1801 + /// When <see cref="FoundLocal"/> is true, the index to <see cref="SearchPaths"/> for the recommended local file.
1802 + /// </summary>
1803 + public int RecommendedSearchPath { get; private set; }
1804
1805 /// <summary>
1806 /// Gets the optional URL to download container or payload.
1807 /// </summary>
1777 - public string DownloadSource { get; private set; }
1808 + public string DownloadUrl { get; private set; }
1809
1810 /// <summary>
1780 - /// Gets the recommended action from the engine.
1811 + /// Gets the optional identity of the container that contains the payload being acquired.
1812 /// </summary>
1782 - public BOOTSTRAPPER_RESOLVESOURCE_ACTION Recommendation { get; private set; }
1813 + public string PayloadContainerId { get; private set; }
1814
1815 /// <summary>
1785 - /// Gets or sets the action to perform.
1816 + /// Gets or sets the index to <see cref="SearchPaths"/> to use when <see cref="CancellableActionEventArgs{T}.Action"/> is set to <see cref="CacheOperation.Copy"/>.
1817 /// </summary>
1787 - public BOOTSTRAPPER_RESOLVESOURCE_ACTION Action { get; set; }
1818 + public int ChosenSearchPath { get; set; }
1819 }
1820
1821 /// <summary>
src/WixToolset.Mba.Core/IBootstrapperApplication.cs
+57 -43
@@ -44,13 +44,10 @@ namespace WixToolset.Mba.Core
44 /// <summary>
45 /// See <see cref="IDefaultBootstrapperApplication.DetectBegin"/>.
46 /// </summary>
47 - /// <param name="fInstalled"></param>
48 - /// <param name="cPackages"></param>
49 - /// <param name="fCancel"></param>
50 - /// <returns></returns>
47 [PreserveSig]
48 [return: MarshalAs(UnmanagedType.I4)]
49 int OnDetectBegin(
50 + [MarshalAs(UnmanagedType.Bool)] bool fCached,
51 [MarshalAs(UnmanagedType.Bool)] bool fInstalled,
52 [MarshalAs(UnmanagedType.U4)] int cPackages,
53 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel
@@ -540,32 +537,22 @@ namespace WixToolset.Mba.Core
537 /// <summary>
538 /// See <see cref="IDefaultBootstrapperApplication.CacheAcquireBegin"/>.
539 /// </summary>
543 - /// <param name="wzPackageOrContainerId"></param>
544 - /// <param name="wzPayloadId"></param>
545 - /// <param name="operation"></param>
546 - /// <param name="wzSource"></param>
547 - /// <param name="fCancel"></param>
548 - /// <returns></returns>
540 [PreserveSig]
541 [return: MarshalAs(UnmanagedType.I4)]
542 int OnCacheAcquireBegin(
543 [MarshalAs(UnmanagedType.LPWStr)] string wzPackageOrContainerId,
544 [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId,
554 - [MarshalAs(UnmanagedType.U4)] CacheOperation operation,
545 [MarshalAs(UnmanagedType.LPWStr)] string wzSource,
546 + [MarshalAs(UnmanagedType.LPWStr)] string wzDownloadUrl,
547 + [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadContainerId,
548 + [MarshalAs(UnmanagedType.U4)] CacheOperation recommendation,
549 + [MarshalAs(UnmanagedType.I4)] ref CacheOperation action,
550 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel
551 );
552
553 /// <summary>
554 /// See <see cref="IDefaultBootstrapperApplication.CacheAcquireProgress"/>.
555 /// </summary>
562 - /// <param name="wzPackageOrContainerId"></param>
563 - /// <param name="wzPayloadId"></param>
564 - /// <param name="dw64Progress"></param>
565 - /// <param name="dw64Total"></param>
566 - /// <param name="dwOverallPercentage"></param>
567 - /// <param name="fCancel"></param>
568 - /// <returns></returns>
556 [PreserveSig]
557 [return: MarshalAs(UnmanagedType.I4)]
558 int OnCacheAcquireProgress(
@@ -578,37 +565,28 @@ namespace WixToolset.Mba.Core
565 );
566
567 /// <summary>
581 - /// See <see cref="IDefaultBootstrapperApplication.ResolveSource"/>.
568 + /// See <see cref="IDefaultBootstrapperApplication.CacheAcquireResolving"/>.
569 /// </summary>
583 - /// <param name="wzPackageOrContainerId"></param>
584 - /// <param name="wzPayloadId"></param>
585 - /// <param name="wzLocalSource"></param>
586 - /// <param name="wzDownloadSource"></param>
587 - /// <param name="recommendation"></param>
588 - /// <param name="action"></param>
589 - /// <param name="fCancel"></param>
590 - /// <returns></returns>
570 [PreserveSig]
571 [return: MarshalAs(UnmanagedType.I4)]
593 - int OnResolveSource(
572 + int OnCacheAcquireResolving(
573 [MarshalAs(UnmanagedType.LPWStr)] string wzPackageOrContainerId,
574 [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadId,
596 - [MarshalAs(UnmanagedType.LPWStr)] string wzLocalSource,
597 - [MarshalAs(UnmanagedType.LPWStr)] string wzDownloadSource,
598 - BOOTSTRAPPER_RESOLVESOURCE_ACTION recommendation,
599 - ref BOOTSTRAPPER_RESOLVESOURCE_ACTION action,
575 + [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 3, ArraySubType = UnmanagedType.LPWStr), In] string[] searchPaths,
576 + [MarshalAs(UnmanagedType.U4)] int cSearchPaths,
577 + [MarshalAs(UnmanagedType.Bool)] bool fFoundLocal,
578 + [MarshalAs(UnmanagedType.U4)] int dwRecommendedSearchPath,
579 + [MarshalAs(UnmanagedType.LPWStr)] string wzDownloadUrl,
580 + [MarshalAs(UnmanagedType.LPWStr)] string wzPayloadContainerId,
581 + [MarshalAs(UnmanagedType.I4)] CacheResolveOperation recommendation,
582 + [MarshalAs(UnmanagedType.U4)] ref int dwChosenSearchPath,
583 + [MarshalAs(UnmanagedType.I4)] ref CacheResolveOperation action,
584 [MarshalAs(UnmanagedType.Bool)] ref bool fCancel
585 );
586
587 /// <summary>
588 /// See <see cref="IDefaultBootstrapperApplication.CacheAcquireComplete"/>.
589 /// </summary>
606 - /// <param name="wzPackageOrContainerId"></param>
607 - /// <param name="wzPayloadId"></param>
608 - /// <param name="hrStatus"></param>
609 - /// <param name="recommendation"></param>
610 - /// <param name="pAction"></param>
611 - /// <returns></returns>
590 [PreserveSig]
591 [return: MarshalAs(UnmanagedType.I4)]
592 int OnCacheAcquireComplete(
@@ -1419,19 +1397,55 @@ namespace WixToolset.Mba.Core
1397 public enum CacheOperation
1398 {
1399 /// <summary>
1422 - /// Container or payload is being copied.
1400 + /// There is no source available.
1401 + /// </summary>
1402 + None,
1403 +
1404 + /// <summary>
1405 + /// Copy the payload or container from the chosen local source.
1406 /// </summary>
1407 Copy,
1408
1409 /// <summary>
1427 - /// Container or payload is being downloaded.
1410 + /// Download the payload or container using the download URL.
1411 /// </summary>
1412 Download,
1413
1414 /// <summary>
1432 - /// Container or payload is being extracted.
1415 + /// Extract the payload from the container.
1416 + /// </summary>
1417 + Extract,
1418 + }
1419 +
1420 + /// <summary>
1421 + /// The source to be used to acquire a container or payload.
1422 + /// </summary>
1423 + public enum CacheResolveOperation
1424 + {
1425 + /// <summary>
1426 + /// There is no source available.
1427 + /// </summary>
1428 + None,
1429 +
1430 + /// <summary>
1431 + /// Copy the payload or container from the chosen local source.
1432 /// </summary>
1434 - Extract
1433 + Local,
1434 +
1435 + /// <summary>
1436 + /// Download the payload or container from the download URL.
1437 + /// </summary>
1438 + Download,
1439 +
1440 + /// <summary>
1441 + /// Extract the payload from the container.
1442 + /// </summary>
1443 + Container,
1444 +
1445 + /// <summary>
1446 + /// Look again for the payload or container locally.
1447 + /// </summary>
1448 + Retry,
1449 }
1450
1451 /// <summary>
@@ -1637,7 +1651,7 @@ namespace WixToolset.Mba.Core
1651 }
1652
1653 /// <summary>
1640 - /// The available actions for <see cref="IDefaultBootstrapperApplication.ResolveSource"/>.
1654 + /// The available actions for <see cref="IDefaultBootstrapperApplication.CacheAcquireResolving"/>.
1655 /// </summary>
1656 public enum BOOTSTRAPPER_RESOLVESOURCE_ACTION
1657 {
src/WixToolset.Mba.Core/IDefaultBootstrapperApplication.cs
+11 -8
@@ -30,12 +30,16 @@ namespace WixToolset.Mba.Core
30 event EventHandler<BeginMsiTransactionCompleteEventArgs> BeginMsiTransactionComplete;
31
32 /// <summary>
33 - /// Fired when the engine has begun acquiring the installation sources.
33 + /// Fired when the engine has begun acquiring the payload or container.
34 + /// The BA can change the source using <see cref="IEngine.SetLocalSource(string, string, string)"/>
35 + /// or <see cref="IEngine.SetDownloadSource(string, string, string, string, string)"/>.
36 /// </summary>
37 event EventHandler<CacheAcquireBeginEventArgs> CacheAcquireBegin;
38
39 /// <summary>
38 - /// Fired when the engine has completed the acquisition of the installation sources.
40 + /// Fired when the engine has completed the acquisition of the payload or container.
41 + /// The BA can change the source using <see cref="IEngine.SetLocalSource(string, string, string)"/>
42 + /// or <see cref="IEngine.SetDownloadSource(string, string, string, string, string)"/>.
43 /// </summary>
44 event EventHandler<CacheAcquireCompleteEventArgs> CacheAcquireComplete;
45
@@ -44,6 +48,11 @@ namespace WixToolset.Mba.Core
48 /// </summary>
49 event EventHandler<CacheAcquireProgressEventArgs> CacheAcquireProgress;
50
51 + /// <summary>
52 + /// Fired by the engine to allow the BA to override the acquisition action.
53 + /// </summary>
54 + event EventHandler<CacheAcquireResolvingEventArgs> CacheAcquireResolving;
55 +
56 /// <summary>
57 /// Fired when the engine has begun caching the installation sources.
58 /// </summary>
@@ -284,12 +293,6 @@ namespace WixToolset.Mba.Core
293 /// </summary>
294 event EventHandler<RegisterCompleteEventArgs> RegisterComplete;
295
287 - /// <summary>
288 - /// Fired by the engine to allow the BA to change the source
289 - /// using <see cref="IEngine.SetLocalSource(string, string, string)"/> or <see cref="IEngine.SetDownloadSource(string, string, string, string, string)"/>.
290 - /// </summary>
291 - event EventHandler<ResolveSourceEventArgs> ResolveSource;
292 -
296 /// <summary>
297 /// Fired when the engine is about to rollback an MSI transaction.
298 /// </summary>
src/balutil/balretry.cpp
+139 -84
@@ -2,23 +2,33 @@
2
3 #include "precomp.h"
4
5 +typedef enum BALRETRY_TYPE
6 +{
7 + BALRETRY_TYPE_CACHE_CONTAINER,
8 + BALRETRY_TYPE_CACHE_PAYLOAD,
9 + BALRETRY_TYPE_EXECUTE,
10 +} BALRETRY_TYPE;
11 +
12 struct BALRETRY_INFO
13 {
7 - LPWSTR sczId; // package or container id.
8 - LPWSTR sczPayloadId; // optional payload id.
14 + LPWSTR sczId;
15 DWORD cRetries;
16 DWORD dwLastError;
17 };
18
19 static DWORD vdwMaxRetries = 0;
20 static DWORD vdwTimeout = 0;
15 -static BALRETRY_INFO vrgRetryInfo[2];
21 +static BALRETRY_INFO vrgRetryInfo[3];
22
23 // prototypes
24 static BOOL IsActiveRetryEntry(
25 __in BALRETRY_TYPE type,
20 - __in_z LPCWSTR wzPackageId,
21 - __in_z_opt LPCWSTR wzPayloadId
26 + __in_z LPCWSTR sczId
27 + );
28 +
29 +static HRESULT StartActiveRetryEntry(
30 + __in BALRETRY_TYPE type,
31 + __in_z LPCWSTR sczId
32 );
33
34
@@ -39,7 +49,6 @@ DAPI_(void) BalRetryUninitialize()
49 for (DWORD i = 0; i < countof(vrgRetryInfo); ++i)
50 {
51 ReleaseStr(vrgRetryInfo[i].sczId);
42 - ReleaseStr(vrgRetryInfo[i].sczPayloadId);
52 memset(vrgRetryInfo + i, 0, sizeof(BALRETRY_INFO));
53 }
54
@@ -48,34 +57,32 @@ DAPI_(void) BalRetryUninitialize()
57 }
58
59
51 -DAPI_(void) BalRetryStartPackage(
52 - __in BALRETRY_TYPE type,
53 - __in_z_opt LPCWSTR wzPackageId,
60 +DAPI_(void) BalRetryStartContainerOrPayload(
61 + __in_z_opt LPCWSTR wzContainerOrPackageId,
62 __in_z_opt LPCWSTR wzPayloadId
63 )
64 {
57 - if (!wzPackageId || !*wzPackageId)
65 + if (!wzContainerOrPackageId && !wzPayloadId)
66 {
59 - ReleaseNullStr(vrgRetryInfo[type].sczId);
60 - ReleaseNullStr(vrgRetryInfo[type].sczPayloadId);
67 + ReleaseNullStr(vrgRetryInfo[BALRETRY_TYPE_CACHE_CONTAINER].sczId);
68 + ReleaseNullStr(vrgRetryInfo[BALRETRY_TYPE_CACHE_PAYLOAD].sczId);
69 }
62 - else if (IsActiveRetryEntry(type, wzPackageId, wzPayloadId))
70 + else if (wzPayloadId)
71 {
64 - ++vrgRetryInfo[type].cRetries;
65 - ::Sleep(vdwTimeout);
72 + StartActiveRetryEntry(BALRETRY_TYPE_CACHE_PAYLOAD, wzPayloadId);
73 }
74 else
75 {
69 - StrAllocString(&vrgRetryInfo[type].sczId, wzPackageId, 0);
70 - if (wzPayloadId)
71 - {
72 - StrAllocString(&vrgRetryInfo[type].sczPayloadId, wzPayloadId, 0);
73 - }
74 -
75 - vrgRetryInfo[type].cRetries = 0;
76 + StartActiveRetryEntry(BALRETRY_TYPE_CACHE_CONTAINER, wzContainerOrPackageId);
77 }
78 +}
79
78 - vrgRetryInfo[type].dwLastError = ERROR_SUCCESS;
80 +
81 +DAPI_(void) BalRetryStartPackage(
82 + __in_z LPCWSTR wzPackageId
83 + )
84 +{
85 + StartActiveRetryEntry(BALRETRY_TYPE_EXECUTE, wzPackageId);
86 }
87
88
@@ -84,87 +91,112 @@ DAPI_(void) BalRetryErrorOccurred(
91 __in DWORD dwError
92 )
93 {
87 - if (IsActiveRetryEntry(BALRETRY_TYPE_CACHE, wzPackageId, NULL))
94 + if (IsActiveRetryEntry(BALRETRY_TYPE_EXECUTE, wzPackageId))
95 {
89 - vrgRetryInfo[BALRETRY_TYPE_CACHE].dwLastError = dwError;
96 + vrgRetryInfo[BALRETRY_TYPE_EXECUTE].dwLastError = dwError;
97 }
91 - else if (IsActiveRetryEntry(BALRETRY_TYPE_EXECUTE, wzPackageId, NULL))
98 +}
99 +
100 +
101 +DAPI_(HRESULT) BalRetryEndContainerOrPayload(
102 + __in_z_opt LPCWSTR wzContainerOrPackageId,
103 + __in_z_opt LPCWSTR wzPayloadId,
104 + __in HRESULT hrError,
105 + __inout BOOL* pfRetry
106 + )
107 +{
108 + HRESULT hr = S_OK;
109 + BALRETRY_TYPE type = BALRETRY_TYPE_CACHE_PAYLOAD;
110 + LPCWSTR wzId = NULL;
111 +
112 + if (!wzContainerOrPackageId && !wzPayloadId)
113 {
93 - vrgRetryInfo[BALRETRY_TYPE_EXECUTE].dwLastError = dwError;
114 + ReleaseNullStr(vrgRetryInfo[BALRETRY_TYPE_CACHE_CONTAINER].sczId);
115 + ReleaseNullStr(vrgRetryInfo[BALRETRY_TYPE_CACHE_PAYLOAD].sczId);
116 + ExitFunction();
117 + }
118 + else if (wzPayloadId)
119 + {
120 + type = BALRETRY_TYPE_CACHE_PAYLOAD;
121 + wzId = wzPayloadId;
122 + }
123 + else
124 + {
125 + type = BALRETRY_TYPE_CACHE_CONTAINER;
126 + wzId = wzContainerOrPackageId;
127 }
128 +
129 + if (FAILED(hrError) && vrgRetryInfo[type].cRetries < vdwMaxRetries && IsActiveRetryEntry(type, wzId))
130 + {
131 + // Retry on all errors except the following.
132 + if (HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT) != hrError &&
133 + BG_E_NETWORK_DISCONNECTED != hrError &&
134 + HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) != hrError &&
135 + HRESULT_FROM_WIN32(ERROR_INTERNET_NAME_NOT_RESOLVED) != hrError)
136 + {
137 + *pfRetry = TRUE;
138 + }
139 + }
140 +
141 +LExit:
142 + return hr;
143 }
144
145
146 DAPI_(HRESULT) BalRetryEndPackage(
99 - __in BALRETRY_TYPE type,
100 - __in_z_opt LPCWSTR wzPackageId,
101 - __in_z_opt LPCWSTR wzPayloadId,
147 + __in_z LPCWSTR wzPackageId,
148 __in HRESULT hrError,
149 __inout BOOL* pfRetry
150 )
151 {
152 HRESULT hr = S_OK;
153 + BALRETRY_TYPE type = BALRETRY_TYPE_EXECUTE;
154
155 if (!wzPackageId || !*wzPackageId)
156 {
157 ReleaseNullStr(vrgRetryInfo[type].sczId);
111 - ReleaseNullStr(vrgRetryInfo[type].sczPayloadId);
158 }
113 - else if (FAILED(hrError) && vrgRetryInfo[type].cRetries < vdwMaxRetries && IsActiveRetryEntry(type, wzPackageId, wzPayloadId))
159 + else if (FAILED(hrError) && vrgRetryInfo[type].cRetries < vdwMaxRetries && IsActiveRetryEntry(type, wzPackageId))
160 {
115 - if (BALRETRY_TYPE_CACHE == type)
161 + // If the service is out of whack, just try again.
162 + if (HRESULT_FROM_WIN32(ERROR_INSTALL_SERVICE_FAILURE) == hrError)
163 {
117 - // Retry on all errors except the following.
118 - if (HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT) != hrError &&
119 - BG_E_NETWORK_DISCONNECTED != hrError &&
120 - HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) != hrError &&
121 - HRESULT_FROM_WIN32(ERROR_INTERNET_NAME_NOT_RESOLVED) != hrError)
122 - {
123 - *pfRetry = TRUE;
124 - }
164 + *pfRetry = TRUE;
165 }
126 - else if (BALRETRY_TYPE_EXECUTE == type)
166 + else if (HRESULT_FROM_WIN32(ERROR_INSTALL_FAILURE) == hrError)
167 {
128 - // If the service is out of whack, just try again.
129 - if (HRESULT_FROM_WIN32(ERROR_INSTALL_SERVICE_FAILURE) == hrError)
130 - {
131 - *pfRetry = TRUE;
132 - }
133 - else if (HRESULT_FROM_WIN32(ERROR_INSTALL_FAILURE) == hrError)
134 - {
135 - DWORD dwError = vrgRetryInfo[type].dwLastError;
136 -
137 - // If we failed with one of these specific error codes, then retry since
138 - // we've seen these have a high success of succeeding on retry.
139 - if (1303 == dwError ||
140 - 1304 == dwError ||
141 - 1306 == dwError ||
142 - 1307 == dwError ||
143 - 1309 == dwError ||
144 - 1310 == dwError ||
145 - 1311 == dwError ||
146 - 1312 == dwError ||
147 - 1316 == dwError ||
148 - 1317 == dwError ||
149 - 1321 == dwError ||
150 - 1335 == dwError ||
151 - 1402 == dwError ||
152 - 1406 == dwError ||
153 - 1606 == dwError ||
154 - 1706 == dwError ||
155 - 1719 == dwError ||
156 - 1723 == dwError ||
157 - 1923 == dwError ||
158 - 1931 == dwError)
159 - {
160 - *pfRetry = TRUE;
161 - }
162 - }
163 - else if (HRESULT_FROM_WIN32(ERROR_INSTALL_ALREADY_RUNNING) == hrError)
168 + DWORD dwError = vrgRetryInfo[type].dwLastError;
169 +
170 + // If we failed with one of these specific error codes, then retry since
171 + // we've seen these have a high success of succeeding on retry.
172 + if (1303 == dwError ||
173 + 1304 == dwError ||
174 + 1306 == dwError ||
175 + 1307 == dwError ||
176 + 1309 == dwError ||
177 + 1310 == dwError ||
178 + 1311 == dwError ||
179 + 1312 == dwError ||
180 + 1316 == dwError ||
181 + 1317 == dwError ||
182 + 1321 == dwError ||
183 + 1335 == dwError ||
184 + 1402 == dwError ||
185 + 1406 == dwError ||
186 + 1606 == dwError ||
187 + 1706 == dwError ||
188 + 1719 == dwError ||
189 + 1723 == dwError ||
190 + 1923 == dwError ||
191 + 1931 == dwError)
192 {
193 *pfRetry = TRUE;
194 }
195 }
196 + else if (HRESULT_FROM_WIN32(ERROR_INSTALL_ALREADY_RUNNING) == hrError)
197 + {
198 + *pfRetry = TRUE;
199 + }
200 }
201
202 return hr;
@@ -175,17 +207,40 @@ DAPI_(HRESULT) BalRetryEndPackage(
207
208 static BOOL IsActiveRetryEntry(
209 __in BALRETRY_TYPE type,
178 - __in_z LPCWSTR wzPackageId,
179 - __in_z_opt LPCWSTR wzPayloadId
210 + __in_z LPCWSTR sczId
211 )
212 {
213 BOOL fActive = FALSE;
214
184 - fActive = vrgRetryInfo[type].sczId && CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, wzPackageId, -1, vrgRetryInfo[type].sczId, -1);
185 - if (fActive && wzPayloadId) // if a payload id was provided ensure it matches.
215 + fActive = vrgRetryInfo[type].sczId && CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, sczId, -1, vrgRetryInfo[type].sczId, -1);
216 +
217 + return fActive;
218 +}
219 +
220 +static HRESULT StartActiveRetryEntry(
221 + __in BALRETRY_TYPE type,
222 + __in_z LPCWSTR sczId
223 + )
224 +{
225 + HRESULT hr = S_OK;
226 +
227 + if (!sczId || !*sczId)
228 {
187 - fActive = vrgRetryInfo[type].sczPayloadId && CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, wzPayloadId, -1, vrgRetryInfo[type].sczPayloadId, -1);
229 + ReleaseNullStr(vrgRetryInfo[type].sczId);
230 }
231 + else if (IsActiveRetryEntry(type, sczId))
232 + {
233 + ++vrgRetryInfo[type].cRetries;
234 + ::Sleep(vdwTimeout);
235 + }
236 + else
237 + {
238 + hr = StrAllocString(&vrgRetryInfo[type].sczId, sczId, 0);
239
190 - return fActive;
240 + vrgRetryInfo[type].cRetries = 0;
241 + }
242 +
243 + vrgRetryInfo[type].dwLastError = ERROR_SUCCESS;
244 +
245 + return hr;
246 }
src/balutil/balutil.vcxproj
+4 -4
@@ -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. -->
3
4 <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
5 - <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props')" />
6 - <Import Project="..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props')" />
5 + <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props')" />
6 + <Import Project="..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props')" />
7
8 <ItemGroup Label="ProjectConfigurations">
9 <ProjectConfiguration Include="Debug|ARM64">
@@ -98,8 +98,8 @@
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>
100 </PropertyGroup>
101 - <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props'))" />
101 + <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props'))" />
102 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.3.3.37\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.3.3.37\build\Nerdbank.GitVersioning.targets'))" />
103 - <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props'))" />
103 + <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props'))" />
104 </Target>
105 </Project>
\ No newline at end of file
src/balutil/inc/BAFunctions.h
+1 -1
@@ -42,7 +42,7 @@ enum BA_FUNCTIONS_MESSAGE
42 BA_FUNCTIONS_MESSAGE_ONCACHEPACKAGEBEGIN = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEPACKAGEBEGIN,
43 BA_FUNCTIONS_MESSAGE_ONCACHEACQUIREBEGIN = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIREBEGIN,
44 BA_FUNCTIONS_MESSAGE_ONCACHEACQUIREPROGRESS = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIREPROGRESS,
45 - BA_FUNCTIONS_MESSAGE_ONRESOLVESOURCE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONRESOLVESOURCE,
45 + BA_FUNCTIONS_MESSAGE_ONCACHEACQUIRERESOLVING = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIRERESOLVING,
46 BA_FUNCTIONS_MESSAGE_ONCACHEACQUIRECOMPLETE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIRECOMPLETE,
47 BA_FUNCTIONS_MESSAGE_ONCACHEVERIFYBEGIN = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEVERIFYBEGIN,
48 BA_FUNCTIONS_MESSAGE_ONCACHEVERIFYCOMPLETE = BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEVERIFYCOMPLETE,
src/balutil/inc/BalBaseBAFunctions.h
+16 -7
@@ -90,6 +90,7 @@ public: // IBootstrapperApplication
90 }
91
92 virtual STDMETHODIMP OnDetectBegin(
93 + __in BOOL /*fCached*/,
94 __in BOOL /*fInstalled*/,
95 __in DWORD /*cPackages*/,
96 __inout BOOL* /*pfCancel*/
@@ -385,8 +386,11 @@ public: // IBootstrapperApplication
386 virtual STDMETHODIMP OnCacheAcquireBegin(
387 __in_z LPCWSTR /*wzPackageOrContainerId*/,
388 __in_z_opt LPCWSTR /*wzPayloadId*/,
388 - __in BOOTSTRAPPER_CACHE_OPERATION /*operation*/,
389 __in_z LPCWSTR /*wzSource*/,
390 + __in_z_opt LPCWSTR /*wzDownloadUrl*/,
391 + __in_z_opt LPCWSTR /*wzPayloadContainerId*/,
392 + __in BOOTSTRAPPER_CACHE_OPERATION /*recommendation*/,
393 + __inout BOOTSTRAPPER_CACHE_OPERATION* /*pAction*/,
394 __inout BOOL* /*pfCancel*/
395 )
396 {
@@ -405,13 +409,18 @@ public: // IBootstrapperApplication
409 return S_OK;
410 }
411
408 - virtual STDMETHODIMP OnResolveSource(
409 - __in_z LPCWSTR /*wzPackageOrContainerId*/,
412 + virtual STDMETHODIMP OnCacheAcquireResolving(
413 + __in_z_opt LPCWSTR /*wzPackageOrContainerId*/,
414 __in_z_opt LPCWSTR /*wzPayloadId*/,
411 - __in_z LPCWSTR /*wzLocalSource*/,
412 - __in_z_opt LPCWSTR /*wzDownloadSource*/,
413 - __in BOOTSTRAPPER_RESOLVESOURCE_ACTION /*recommendation*/,
414 - __inout BOOTSTRAPPER_RESOLVESOURCE_ACTION* /*pAction*/,
415 + __in_z LPCWSTR* /*rgSearchPaths*/,
416 + __in DWORD /*cSearchPaths*/,
417 + __in BOOL /*fFoundLocal*/,
418 + __in DWORD /*dwRecommendedSearchPath*/,
419 + __in_z_opt LPCWSTR /*wzDownloadUrl*/,
420 + __in_z_opt LPCWSTR /*wzPayloadContainerId*/,
421 + __in BOOTSTRAPPER_CACHE_RESOLVE_OPERATION /*recommendation*/,
422 + __inout DWORD* /*pdwChosenSearchPath*/,
423 + __inout BOOTSTRAPPER_CACHE_RESOLVE_OPERATION* /*pAction*/,
424 __inout BOOL* /*pfCancel*/
425 )
426 {
src/balutil/inc/BalBaseBAFunctionsProc.h
+1 -1
@@ -77,7 +77,7 @@ static HRESULT WINAPI BalBaseBAFunctionsProc(
77 case BA_FUNCTIONS_MESSAGE_ONCACHEPACKAGEBEGIN:
78 case BA_FUNCTIONS_MESSAGE_ONCACHEACQUIREBEGIN:
79 case BA_FUNCTIONS_MESSAGE_ONCACHEACQUIREPROGRESS:
80 - case BA_FUNCTIONS_MESSAGE_ONRESOLVESOURCE:
80 + case BA_FUNCTIONS_MESSAGE_ONCACHEACQUIRERESOLVING:
81 case BA_FUNCTIONS_MESSAGE_ONCACHEACQUIRECOMPLETE:
82 case BA_FUNCTIONS_MESSAGE_ONCACHEVERIFYBEGIN:
83 case BA_FUNCTIONS_MESSAGE_ONCACHEVERIFYCOMPLETE:
src/balutil/inc/BalBaseBootstrapperApplication.h
+24 -12
@@ -87,6 +87,7 @@ public: // IBootstrapperApplication
87 }
88
89 virtual STDMETHODIMP OnDetectBegin(
90 + __in BOOL /*fCached*/,
91 __in BOOL /*fInstalled*/,
92 __in DWORD /*cPackages*/,
93 __inout BOOL* pfCancel
@@ -442,14 +443,17 @@ public: // IBootstrapperApplication
443 }
444
445 virtual STDMETHODIMP OnCacheAcquireBegin(
445 - __in_z LPCWSTR wzPackageOrContainerId,
446 + __in_z_opt LPCWSTR wzPackageOrContainerId,
447 __in_z_opt LPCWSTR wzPayloadId,
447 - __in BOOTSTRAPPER_CACHE_OPERATION /*operation*/,
448 __in_z LPCWSTR /*wzSource*/,
449 + __in_z_opt LPCWSTR /*wzDownloadUrl*/,
450 + __in_z_opt LPCWSTR /*wzPayloadContainerId*/,
451 + __in BOOTSTRAPPER_CACHE_OPERATION /*recommendation*/,
452 + __inout BOOTSTRAPPER_CACHE_OPERATION* /*pAction*/,
453 __inout BOOL* pfCancel
454 )
455 {
452 - BalRetryStartPackage(BALRETRY_TYPE_CACHE, wzPackageOrContainerId, wzPayloadId);
456 + BalRetryStartContainerOrPayload(wzPackageOrContainerId, wzPayloadId);
457 *pfCancel |= CheckCanceled();
458 return S_OK;
459 }
@@ -488,13 +492,18 @@ public: // IBootstrapperApplication
492 return hr;
493 }
494
491 - virtual STDMETHODIMP OnResolveSource(
492 - __in_z LPCWSTR /*wzPackageOrContainerId*/,
495 + virtual STDMETHODIMP OnCacheAcquireResolving(
496 + __in_z_opt LPCWSTR /*wzPackageOrContainerId*/,
497 __in_z_opt LPCWSTR /*wzPayloadId*/,
494 - __in_z LPCWSTR /*wzLocalSource*/,
495 - __in_z_opt LPCWSTR /*wzDownloadSource*/,
496 - __in BOOTSTRAPPER_RESOLVESOURCE_ACTION /*recommendation*/,
497 - __inout BOOTSTRAPPER_RESOLVESOURCE_ACTION* /*pAction*/,
498 + __in_z LPCWSTR* /*rgSearchPaths*/,
499 + __in DWORD /*cSearchPaths*/,
500 + __in BOOL /*fFoundLocal*/,
501 + __in DWORD /*dwRecommendedSearchPath*/,
502 + __in_z_opt LPCWSTR /*wzDownloadUrl*/,
503 + __in_z_opt LPCWSTR /*wzPayloadContainerId*/,
504 + __in BOOTSTRAPPER_CACHE_RESOLVE_OPERATION /*recommendation*/,
505 + __inout DWORD* /*pdwChosenSearchPath*/,
506 + __inout BOOTSTRAPPER_CACHE_RESOLVE_OPERATION* /*pAction*/,
507 __inout BOOL* pfCancel
508 )
509 {
@@ -518,7 +527,7 @@ public: // IBootstrapperApplication
527 ExitFunction1(hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT));
528 }
529
521 - hr = BalRetryEndPackage(BALRETRY_TYPE_CACHE, wzPackageOrContainerId, wzPayloadId, hrStatus, &fRetry);
530 + hr = BalRetryEndContainerOrPayload(wzPackageOrContainerId, wzPayloadId, hrStatus, &fRetry);
531 ExitOnFailure(hr, "BalRetryEndPackage for cache failed");
532
533 if (fRetry)
@@ -599,7 +608,7 @@ public: // IBootstrapperApplication
608 // Only track retry on execution (not rollback).
609 if (fExecute)
610 {
602 - BalRetryStartPackage(BALRETRY_TYPE_EXECUTE, wzPackageId, NULL);
611 + BalRetryStartPackage(wzPackageId);
612 }
613
614 m_fRollingBack = !fExecute;
@@ -700,7 +709,7 @@ public: // IBootstrapperApplication
709 ExitFunction1(hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT));
710 }
711
703 - hr = BalRetryEndPackage(BALRETRY_TYPE_EXECUTE, wzPackageId, NULL, hrStatus, &fRetry);
712 + hr = BalRetryEndPackage(wzPackageId, hrStatus, &fRetry);
713 ExitOnFailure(hr, "BalRetryEndPackage for execute failed");
714
715 if (fRetry)
@@ -951,6 +960,9 @@ protected:
960 m_fApplying = FALSE;
961 m_fRollingBack = FALSE;
962
963 + m_dwProgressPercentage = 0;
964 + m_dwOverallProgressPercentage = 0;
965 +
966 BalRetryInitialize(dwRetryCount, dwRetryTimeout);
967 }
968
src/balutil/inc/BalBaseBootstrapperApplicationProc.h
+8 -8
@@ -15,7 +15,7 @@ static HRESULT BalBaseBAProcOnDetectBegin(
15 __inout BA_ONDETECTBEGIN_RESULTS* pResults
16 )
17 {
18 - return pBA->OnDetectBegin(pArgs->fInstalled, pArgs->cPackages, &pResults->fCancel);
18 + return pBA->OnDetectBegin(pArgs->fCached, pArgs->fInstalled, pArgs->cPackages, &pResults->fCancel);
19 }
20
21 static HRESULT BalBaseBAProcOnDetectComplete(
@@ -303,7 +303,7 @@ static HRESULT BalBaseBAProcOnCacheAcquireBegin(
303 __inout BA_ONCACHEACQUIREBEGIN_RESULTS* pResults
304 )
305 {
306 - return pBA->OnCacheAcquireBegin(pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->operation, pArgs->wzSource, &pResults->fCancel);
306 + return pBA->OnCacheAcquireBegin(pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->wzSource, pArgs->wzDownloadUrl, pArgs->wzPayloadContainerId, pArgs->recommendation, &pResults->action, &pResults->fCancel);
307 }
308
309 static HRESULT BalBaseBAProcOnCacheAcquireProgress(
@@ -315,13 +315,13 @@ static HRESULT BalBaseBAProcOnCacheAcquireProgress(
315 return pBA->OnCacheAcquireProgress(pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->dw64Progress, pArgs->dw64Total, pArgs->dwOverallPercentage, &pResults->fCancel);
316 }
317
318 -static HRESULT BalBaseBAProcOnResolveSource(
318 +static HRESULT BalBaseBAProcOnCacheAcquireResolving(
319 __in IBootstrapperApplication* pBA,
320 - __in BA_ONRESOLVESOURCE_ARGS* pArgs,
321 - __inout BA_ONRESOLVESOURCE_RESULTS* pResults
320 + __in BA_ONCACHEACQUIRERESOLVING_ARGS* pArgs,
321 + __inout BA_ONCACHEACQUIRERESOLVING_RESULTS* pResults
322 )
323 {
324 - return pBA->OnResolveSource(pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->wzLocalSource, pArgs->wzDownloadSource, pArgs->recommendation, &pResults->action, &pResults->fCancel);
324 + return pBA->OnCacheAcquireResolving(pArgs->wzPackageOrContainerId, pArgs->wzPayloadId, pArgs->rgSearchPaths, pArgs->cSearchPaths, pArgs->fFoundLocal, pArgs->dwRecommendedSearchPath, pArgs->wzDownloadUrl, pArgs->wzPayloadContainerId, pArgs->recommendation, &pResults->dwChosenSearchPath, &pResults->action, &pResults->fCancel);
325 }
326
327 static HRESULT BalBaseBAProcOnCacheAcquireComplete(
@@ -713,8 +713,8 @@ static HRESULT WINAPI BalBaseBootstrapperApplicationProc(
713 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIREPROGRESS:
714 hr = BalBaseBAProcOnCacheAcquireProgress(pBA, reinterpret_cast<BA_ONCACHEACQUIREPROGRESS_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHEACQUIREPROGRESS_RESULTS*>(pvResults));
715 break;
716 - case BOOTSTRAPPER_APPLICATION_MESSAGE_ONRESOLVESOURCE:
717 - hr = BalBaseBAProcOnResolveSource(pBA, reinterpret_cast<BA_ONRESOLVESOURCE_ARGS*>(pvArgs), reinterpret_cast<BA_ONRESOLVESOURCE_RESULTS*>(pvResults));
716 + case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIRERESOLVING:
717 + hr = BalBaseBAProcOnCacheAcquireResolving(pBA, reinterpret_cast<BA_ONCACHEACQUIRERESOLVING_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHEACQUIRERESOLVING_RESULTS*>(pvResults));
718 break;
719 case BOOTSTRAPPER_APPLICATION_MESSAGE_ONCACHEACQUIRECOMPLETE:
720 hr = BalBaseBAProcOnCacheAcquireComplete(pBA, reinterpret_cast<BA_ONCACHEACQUIRECOMPLETE_ARGS*>(pvArgs), reinterpret_cast<BA_ONCACHEACQUIRECOMPLETE_RESULTS*>(pvResults));
src/balutil/inc/IBootstrapperApplication.h
+34 -16
@@ -21,6 +21,7 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
21
22 // OnDetectBegin - called when the engine begins detection.
23 STDMETHOD(OnDetectBegin)(
24 + __in BOOL fCached,
25 __in BOOL fInstalled,
26 __in DWORD cPackages,
27 __inout BOOL* pfCancel
@@ -279,14 +280,20 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
280 __inout BOOL* pfCancel
281 ) = 0;
282
282 - // OnCacheAcquireBegin - called when the engine begins copying or
283 - // downloading a payload to the working folder.
283 + // OnCacheAcquireBegin - called when the engine begins acquiring a payload or container.
284 + //
285 + // Notes:
286 + // It is expected the BA may call IBootstrapperEngine::SetLocalSource() or IBootstrapperEngine::SetDownloadSource()
287 + // to update the source location before returning.
288 //
289 STDMETHOD(OnCacheAcquireBegin)(
290 __in_z_opt LPCWSTR wzPackageOrContainerId,
291 __in_z_opt LPCWSTR wzPayloadId,
288 - __in BOOTSTRAPPER_CACHE_OPERATION operation,
292 __in_z LPCWSTR wzSource,
293 + __in_z_opt LPCWSTR wzDownloadUrl,
294 + __in_z_opt LPCWSTR wzPayloadContainerId,
295 + __in BOOTSTRAPPER_CACHE_OPERATION recommendation,
296 + __inout BOOTSTRAPPER_CACHE_OPERATION* pAction,
297 __inout BOOL* pfCancel
298 ) = 0;
299
@@ -302,27 +309,38 @@ DECLARE_INTERFACE_IID_(IBootstrapperApplication, IUnknown, "53C31D56-49C0-426B-A
309 __inout BOOL* pfCancel
310 ) = 0;
311
305 - // OnResolveSource - called when a payload or container cannot be found locally.
312 + // OnCacheAcquireResolving - called to allow the BA to override the acquisition action for the payload or container.
313 //
314 // Parameters:
315 + // wzPackageOrContainerId will be NULL when resolving a layout-only payload.
316 // wzPayloadId will be NULL when resolving a container.
309 - // wzDownloadSource will be NULL if the container or payload does not provide a DownloadURL.
317 + // wzDownloadUrl will be NULL if the container or payload does not provide a DownloadURL.
318 + // wzPayloadContainerId will not be NULL if acquiring a payload that is in a container.
319 //
311 - // Notes:
312 - // It is expected the BA may call IBootstrapperEngine::SetLocalSource() or IBootstrapperEngine::SetDownloadSource()
313 - // to update the source location before returning BOOTSTRAPPER_RESOLVESOURCE_ACTION_RETRY or BOOTSTRAPPER_RESOLVESOURCE_ACTION_DOWNLOAD.
314 - STDMETHOD(OnResolveSource)(
315 - __in_z LPCWSTR wzPackageOrContainerId,
320 + // rgSearchPaths are the search paths used for source resolution.
321 + // fFoundLocal is TRUE when dwRecommendedSearchPath indicates that the file was found.
322 + // dwRecommendedSearchPath is the index into rgSearchPaths for the recommended local file.
323 + //
324 + STDMETHOD(OnCacheAcquireResolving)(
325 + __in_z_opt LPCWSTR wzPackageOrContainerId,
326 __in_z_opt LPCWSTR wzPayloadId,
317 - __in_z LPCWSTR wzLocalSource,
318 - __in_z_opt LPCWSTR wzDownloadSource,
319 - __in BOOTSTRAPPER_RESOLVESOURCE_ACTION recommendation,
320 - __inout BOOTSTRAPPER_RESOLVESOURCE_ACTION* pAction,
327 + __in_z LPCWSTR* rgSearchPaths,
328 + __in DWORD cSearchPaths,
329 + __in BOOL fFoundLocal,
330 + __in DWORD dwRecommendedSearchPath,
331 + __in_z_opt LPCWSTR wzDownloadUrl,
332 + __in_z_opt LPCWSTR wzPayloadContainerId,
333 + __in BOOTSTRAPPER_CACHE_RESOLVE_OPERATION recommendation,
334 + __inout DWORD* pdwChosenSearchPath,
335 + __inout BOOTSTRAPPER_CACHE_RESOLVE_OPERATION* pAction,
336 __inout BOOL* pfCancel
337 ) = 0;
338
324 - // OnCacheAcquireComplete - called after the engine copied or downloaded
325 - // a payload to the working folder.
339 + // OnCacheAcquireComplete - called after the engine acquired the payload or container.
340 + //
341 + // Notes:
342 + // It is expected the BA may call IBootstrapperEngine::SetLocalSource() or IBootstrapperEngine::SetDownloadSource()
343 + // to update the source location before returning BOOTSTRAPPER_CACHEACQUIRECOMPLETE_ACTION_RETRY.
344 //
345 STDMETHOD(OnCacheAcquireComplete)(
346 __in_z_opt LPCWSTR wzPackageOrContainerId,
src/balutil/inc/balretry.h
+23 -14
@@ -6,12 +6,6 @@
6 extern "C" {
7 #endif
8
9 -typedef enum BALRETRY_TYPE
10 -{
11 - BALRETRY_TYPE_CACHE,
12 - BALRETRY_TYPE_EXECUTE,
13 -} BALRETRY_TYPE;
14 -
9 /*******************************************************************
10 BalRetryInitialize - initialize the retry count and timeout between
11 retries (in milliseconds).
@@ -33,9 +27,7 @@ DAPI_(void) BalRetryUninitialize();
27 wait the specified timeout.
28 ********************************************************************/
29 DAPI_(void) BalRetryStartPackage(
36 - __in BALRETRY_TYPE type,
37 - __in_z_opt LPCWSTR wzPackageId,
38 - __in_z_opt LPCWSTR wzPayloadId
30 + __in_z LPCWSTR wzPackageId
31 );
32
33 /*******************************************************************
@@ -43,17 +35,34 @@ DAPI_(void) BalRetryStartPackage(
35 to consider.
36 ********************************************************************/
37 DAPI_(void) BalRetryErrorOccurred(
46 - __in_z_opt LPCWSTR wzPackageId,
38 + __in_z LPCWSTR wzPackageId,
39 __in DWORD dwError
40 );
41
42 /*******************************************************************
51 - BalRetryEndPackage - returns IDRETRY is a retry is recommended or
52 - IDNOACTION if a retry is not recommended.
43 + BalRetryEndPackage - returns TRUE if a retry is recommended.
44 ********************************************************************/
45 DAPI_(HRESULT) BalRetryEndPackage(
55 - __in BALRETRY_TYPE type,
56 - __in_z_opt LPCWSTR wzPackageId,
46 + __in_z LPCWSTR wzPackageId,
47 + __in HRESULT hrError,
48 + __inout BOOL* pfRetry
49 + );
50 +
51 +/*******************************************************************
52 + BalRetryStartContainerOrPayload - call when a container or payload
53 + begins to be acquired. If the target is being retried,
54 + the function will wait the specified timeout.
55 +********************************************************************/
56 +DAPI_(void) BalRetryStartContainerOrPayload(
57 + __in_z_opt LPCWSTR wzContainerOrPackageId,
58 + __in_z_opt LPCWSTR wzPayloadId
59 + );
60 +
61 +/*******************************************************************
62 + BalRetryEndContainerOrPayload - returns TRUE if a retry is recommended.
63 +********************************************************************/
64 +DAPI_(HRESULT) BalRetryEndContainerOrPayload(
65 + __in_z_opt LPCWSTR wzContainerOrPackageId,
66 __in_z_opt LPCWSTR wzPayloadId,
67 __in HRESULT hrError,
68 __inout BOOL* pfRetry
src/balutil/packages.config
+2 -2
@@ -1,6 +1,6 @@
1 <?xml version="1.0" encoding="utf-8"?>
2 <packages>
3 <package id="Nerdbank.GitVersioning" version="3.3.37" targetFramework="native" developmentDependency="true" />
4 - <package id="WixToolset.BootstrapperCore.Native" version="4.0.110" targetFramework="native" />
5 - <package id="WixToolset.DUtil" version="4.0.64" targetFramework="native" />
4 + <package id="WixToolset.BootstrapperCore.Native" version="4.0.132" targetFramework="native" />
5 + <package id="WixToolset.DUtil" version="4.0.70" targetFramework="native" />
6 </packages>
\ No newline at end of file
src/bextutil/bextutil.vcxproj
+4 -4
@@ -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. -->
3
4 <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
5 - <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props')" />
6 - <Import Project="..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props')" />
5 + <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props')" />
6 + <Import Project="..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props')" />
7
8 <ItemGroup Label="ProjectConfigurations">
9 <ProjectConfiguration Include="Debug|ARM64">
@@ -87,8 +87,8 @@
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>
89 </PropertyGroup>
90 - <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props'))" />
90 + <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props'))" />
91 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.3.3.37\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.3.3.37\build\Nerdbank.GitVersioning.targets'))" />
92 - <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props'))" />
92 + <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props'))" />
93 </Target>
94 </Project>
\ No newline at end of file
src/bextutil/packages.config
+2 -2
@@ -1,6 +1,6 @@
1 <?xml version="1.0" encoding="utf-8"?>
2 <packages>
3 <package id="Nerdbank.GitVersioning" version="3.3.37" targetFramework="native" developmentDependency="true" />
4 - <package id="WixToolset.BootstrapperCore.Native" version="4.0.110" targetFramework="native" />
5 - <package id="WixToolset.DUtil" version="4.0.64" targetFramework="native" />
4 + <package id="WixToolset.BootstrapperCore.Native" version="4.0.132" targetFramework="native" />
5 + <package id="WixToolset.DUtil" version="4.0.70" targetFramework="native" />
6 </packages>
\ No newline at end of file
src/mbanative/mbanative.vcxproj
+4 -4
@@ -2,11 +2,11 @@
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
4 <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
5 - <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props')" />
5 + <Import Project="..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props')" />
6 <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')" />
7 <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')" />
8 <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')" />
9 - <Import Project="..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props')" />
9 + <Import Project="..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props" Condition="Exists('..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props')" />
10
11 <ItemGroup Label="ProjectConfigurations">
12 <ProjectConfiguration Include="Debug|ARM64">
@@ -96,7 +96,7 @@
96 <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'))" />
97 <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'))" />
98 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.3.3.37\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.3.3.37\build\Nerdbank.GitVersioning.targets'))" />
99 - <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props'))" />
100 - <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props'))" />
99 + <Error Condition="!Exists('..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props'))" />
100 + <Error Condition="!Exists('..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props'))" />
101 </Target>
102 </Project>
\ No newline at end of file
src/mbanative/packages.config
+2 -2
@@ -4,6 +4,6 @@
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" />
6 <package id="Nerdbank.GitVersioning" version="3.3.37" targetFramework="native" developmentDependency="true" />
7 - <package id="WixToolset.BootstrapperCore.Native" version="4.0.110" targetFramework="native" />
8 - <package id="WixToolset.DUtil" version="4.0.64" targetFramework="native" />
7 + <package id="WixToolset.BootstrapperCore.Native" version="4.0.132" targetFramework="native" />
8 + <package id="WixToolset.DUtil" version="4.0.70" targetFramework="native" />
9 </packages>
\ No newline at end of file
src/test/BalUtilUnitTest/BalUtilUnitTest.vcxproj
+4 -4
@@ -3,9 +3,9 @@
3
4
5 <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
6 - <Import Project="..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props')" />
6 + <Import Project="..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props')" />
7 <Import Project="..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.props" Condition="Exists('..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.props')" />
8 - <Import Project="..\..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props" Condition="Exists('..\..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props')" />
8 + <Import Project="..\..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props" Condition="Exists('..\..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props')" />
9 <ItemGroup Label="ProjectConfigurations">
10 <ProjectConfiguration Include="Debug|Win32">
11 <Configuration>Debug</Configuration>
@@ -69,7 +69,7 @@
69 </PropertyGroup>
70 <Error Condition="!Exists('..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.props'))" />
71 <Error Condition="!Exists('..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.targets'))" />
72 - <Error Condition="!Exists('..\..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props'))" />
73 - <Error Condition="!Exists('..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props'))" />
72 + <Error Condition="!Exists('..\..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props'))" />
73 + <Error Condition="!Exists('..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props'))" />
74 </Target>
75 </Project>
\ No newline at end of file
src/test/BalUtilUnitTest/packages.config
+2 -2
@@ -3,8 +3,8 @@
3 <packages>
4 <package id="WixBuildTools.TestSupport" version="4.0.47" />
5 <package id="WixBuildTools.TestSupport.Native" version="4.0.47" />
6 - <package id="WixToolset.BootstrapperCore.Native" version="4.0.110" targetFramework="native" />
7 - <package id="WixToolset.DUtil" version="4.0.64" targetFramework="native" />
6 + <package id="WixToolset.BootstrapperCore.Native" version="4.0.132" targetFramework="native" />
7 + <package id="WixToolset.DUtil" version="4.0.70" targetFramework="native" />
8 <package id="xunit.abstractions" version="2.0.3" />
9 <package id="xunit.assert" version="2.4.1" />
10 <package id="xunit.core" version="2.4.1" />
src/test/BextUtilUnitTest/BextUtilUnitTest.vcxproj
+4 -4
@@ -3,9 +3,9 @@
3
4
5 <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
6 - <Import Project="..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props')" />
6 + <Import Project="..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props" Condition="Exists('..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props')" />
7 <Import Project="..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.props" Condition="Exists('..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.props')" />
8 - <Import Project="..\..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props" Condition="Exists('..\..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props')" />
8 + <Import Project="..\..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props" Condition="Exists('..\..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props')" />
9 <ItemGroup Label="ProjectConfigurations">
10 <ProjectConfiguration Include="Debug|Win32">
11 <Configuration>Debug</Configuration>
@@ -68,7 +68,7 @@
68 </PropertyGroup>
69 <Error Condition="!Exists('..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.props'))" />
70 <Error Condition="!Exists('..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixBuildTools.TestSupport.Native.4.0.47\build\WixBuildTools.TestSupport.Native.targets'))" />
71 - <Error Condition="!Exists('..\..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.DUtil.4.0.64\build\WixToolset.DUtil.props'))" />
72 - <Error Condition="!Exists('..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.110\build\WixToolset.BootstrapperCore.Native.props'))" />
71 + <Error Condition="!Exists('..\..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.DUtil.4.0.70\build\WixToolset.DUtil.props'))" />
72 + <Error Condition="!Exists('..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\WixToolset.BootstrapperCore.Native.4.0.132\build\WixToolset.BootstrapperCore.Native.props'))" />
73 </Target>
74 </Project>
\ No newline at end of file
src/test/BextUtilUnitTest/packages.config
+2 -2
@@ -3,8 +3,8 @@
3 <packages>
4 <package id="WixBuildTools.TestSupport" version="4.0.47" />
5 <package id="WixBuildTools.TestSupport.Native" version="4.0.47" />
6 - <package id="WixToolset.BootstrapperCore.Native" version="4.0.110" targetFramework="native" />
7 - <package id="WixToolset.DUtil" version="4.0.64" targetFramework="native" />
6 + <package id="WixToolset.BootstrapperCore.Native" version="4.0.132" targetFramework="native" />
7 + <package id="WixToolset.DUtil" version="4.0.70" targetFramework="native" />
8 <package id="xunit.abstractions" version="2.0.3" />
9 <package id="xunit.assert" version="2.4.1" />
10 <package id="xunit.core" version="2.4.1" />