main
cs 90 lines 3.51 KB
Raw
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 namespace WixInternal.Core.TestPackage
4 {
5 using System.Collections.Generic;
6 using System.Threading;
7 using System.Threading.Tasks;
8 using WixToolset.Core;
9 using WixToolset.Core.Burn;
10 using WixToolset.Core.ExtensionCache;
11 using WixToolset.Core.WindowsInstaller;
12 using WixToolset.Data;
13 using WixToolset.Extensibility.Services;
14
15 /// <summary>
16 /// Utility class to emulate wix.exe with standard backends.
17 /// </summary>
18 public static class WixRunner
19 {
20 /// <summary>
21 /// Emulates calling wix.exe with standard backends.
22 /// </summary>
23 /// <param name="args"></param>
24 /// <param name="messages"></param>
25 /// <param name="warningsAsErrors"></param>
26 /// <returns></returns>
27 public static int Execute(string[] args, out List<Message> messages, bool warningsAsErrors = true)
28 {
29 var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
30 var task = Execute(args, serviceProvider, out messages, warningsAsErrors: warningsAsErrors);
31 return task.Result;
32 }
33
34 /// <summary>
35 /// Emulates calling wix.exe with standard backends.
36 /// This overload always treats warnings as errors.
37 /// </summary>
38 /// <param name="args"></param>
39 /// <returns></returns>
40 public static WixRunnerResult Execute(params string[] args)
41 {
42 return Execute(true, args);
43 }
44
45 /// <summary>
46 /// Emulates calling wix.exe with standard backends.
47 /// </summary>
48 /// <param name="warningsAsErrors"></param>
49 /// <param name="args"></param>
50 /// <returns></returns>
51 public static WixRunnerResult Execute(bool warningsAsErrors, params string[] args)
52 {
53 var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider();
54 var exitCode = Execute(args, serviceProvider, out var messages, warningsAsErrors: warningsAsErrors);
55 return new WixRunnerResult { ExitCode = exitCode.Result, Messages = messages.ToArray() };
56 }
57
58 /// <summary>
59 /// Emulates calling wix.exe with standard backends.
60 /// </summary>
61 /// <param name="args"></param>
62 /// <param name="coreProvider"></param>
63 /// <param name="messages"></param>
64 /// <param name="warningsAsErrors"></param>
65 /// <returns></returns>
66 public static Task<int> Execute(string[] args, IWixToolsetCoreServiceProvider coreProvider, out List<Message> messages, bool warningsAsErrors = true)
67 {
68 coreProvider.AddWindowsInstallerBackend()
69 .AddBundleBackend()
70 .AddExtensionCacheManager();
71
72 var listener = new TestMessageListener();
73
74 messages = listener.Messages;
75
76 var messaging = coreProvider.GetService<IMessaging>();
77 messaging.SetListener(listener);
78
79 var arguments = new List<string>(args);
80 if (warningsAsErrors)
81 {
82 arguments.Add("-wx");
83 }
84
85 var commandLine = coreProvider.GetService<ICommandLine>();
86 var command = commandLine.CreateCommand(arguments.ToArray());
87 return command?.ExecuteAsync(CancellationToken.None) ?? Task.FromResult(1);
88 }
89 }
90 }