aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wix/Program.cs30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/wix/Program.cs b/src/wix/Program.cs
index 3293ef05..3b6c45bc 100644
--- a/src/wix/Program.cs
+++ b/src/wix/Program.cs
@@ -4,6 +4,8 @@ namespace WixToolset.Tools
4{ 4{
5 using System; 5 using System;
6 using System.Runtime.InteropServices; 6 using System.Runtime.InteropServices;
7 using System.Threading;
8 using System.Threading.Tasks;
7 using WixToolset.Converters; 9 using WixToolset.Converters;
8 using WixToolset.Core; 10 using WixToolset.Core;
9 using WixToolset.Data; 11 using WixToolset.Data;
@@ -23,17 +25,27 @@ namespace WixToolset.Tools
23 /// <param name="args">Commandline arguments for the application.</param> 25 /// <param name="args">Commandline arguments for the application.</param>
24 /// <returns>Returns the application error code.</returns> 26 /// <returns>Returns the application error code.</returns>
25 [MTAThread] 27 [MTAThread]
26 public static int Main(string[] args) 28 public static async Task<int> Main(string[] args)
27 { 29 {
28 var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider() 30 var cts = new CancellationTokenSource();
29 .AddConverter();
30
31 var listener = new ConsoleMessageListener("WIX", "wix.exe"); 31 var listener = new ConsoleMessageListener("WIX", "wix.exe");
32 32
33 Console.CancelKeyPress += (s, e) =>
34 {
35 cts.Cancel();
36 e.Cancel = true;
37 };
38
33 try 39 try
34 { 40 {
35 var program = new Program(); 41 var serviceProvider = WixToolsetServiceProviderFactory.CreateServiceProvider()
36 return program.Run(serviceProvider, listener, args); 42 .AddConverter();
43
44 return await Run(serviceProvider, listener, args, cts.Token);
45 }
46 catch (OperationCanceledException)
47 {
48 return -1;
37 } 49 }
38 catch (WixException e) 50 catch (WixException e)
39 { 51 {
@@ -58,9 +70,11 @@ namespace WixToolset.Tools
58 /// Executes the wix command-line interface. 70 /// Executes the wix command-line interface.
59 /// </summary> 71 /// </summary>
60 /// <param name="serviceProvider">Service provider to use throughout this execution.</param> 72 /// <param name="serviceProvider">Service provider to use throughout this execution.</param>
73 /// <param name="listener">Listener to use for the messaging system.</param>
61 /// <param name="args">Command-line arguments to execute.</param> 74 /// <param name="args">Command-line arguments to execute.</param>
75 /// <param name="cancellationToken">Cancellation token.</param>
62 /// <returns>Returns the application error code.</returns> 76 /// <returns>Returns the application error code.</returns>
63 public int Run(IWixToolsetServiceProvider serviceProvider, IMessageListener listener, string[] args) 77 public static Task<int> Run(IWixToolsetServiceProvider serviceProvider, IMessageListener listener, string[] args, CancellationToken cancellationToken)
64 { 78 {
65 var messaging = serviceProvider.GetService<IMessaging>(); 79 var messaging = serviceProvider.GetService<IMessaging>();
66 messaging.SetListener(listener); 80 messaging.SetListener(listener);
@@ -72,7 +86,7 @@ namespace WixToolset.Tools
72 commandLine.ExtensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider, messaging, arguments.Extensions); 86 commandLine.ExtensionManager = CreateExtensionManagerWithStandardBackends(serviceProvider, messaging, arguments.Extensions);
73 commandLine.Arguments = arguments; 87 commandLine.Arguments = arguments;
74 var command = commandLine.ParseStandardCommandLine(); 88 var command = commandLine.ParseStandardCommandLine();
75 return command?.Execute() ?? 1; 89 return command?.ExecuteAsync(cancellationToken) ?? Task.FromResult(1);
76 } 90 }
77 91
78 private static IExtensionManager CreateExtensionManagerWithStandardBackends(IWixToolsetServiceProvider serviceProvider, IMessaging messaging, string[] extensions) 92 private static IExtensionManager CreateExtensionManagerWithStandardBackends(IWixToolsetServiceProvider serviceProvider, IMessaging messaging, string[] extensions)