diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/wix/Program.cs | 30 |
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) |