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) |
