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" />