// perform the user selected action
        internal async void PerformAction(DetailControl detailControl)
        {
            ActivateOutputWindow();
            _outputConsole.Clear();
            var progressDialog = new ProgressDialog(_outputConsole);

            progressDialog.Owner = Window.GetWindow(this);
            progressDialog.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            progressDialog.FileConflictAction    = detailControl.FileConflictAction;
            progressDialog.Show();

            try
            {
                var actions = await detailControl.ResolveActionsAsync(progressDialog);

                // show preview
                var model = (DetailControlModel)_packageDetail.DataContext;
                if (model.Options.ShowPreviewWindow)
                {
                    var shouldContinue = PreviewActions(actions);
                    if (!shouldContinue)
                    {
                        return;
                    }
                }

                // show license agreeement
                bool acceptLicense = ShowLicenseAgreement(actions);
                if (!acceptLicense)
                {
                    return;
                }

                // Create the executor and execute the actions
                var userAction = detailControl.GetUserAction();
                var executor   = new ActionExecutor();
                await Task.Run(
                    () =>
                {
                    executor.ExecuteActions(actions, progressDialog, userAction);
                });

                UpdatePackageStatus();
                detailControl.Refresh();
            }
            catch (Exception ex)
            {
                var errorDialog = new ErrorReportingDialog(
                    ex.Message,
                    ex.ToString());
                errorDialog.ShowModal();
            }
            finally
            {
                progressDialog.CloseWindow();
            }
        }
        // perform the user selected action
        internal async void PerformAction(DetailControl detailControl)
        {
            ActivateOutputWindow();
            _outputConsole.Clear();
            var progressDialog = new ProgressDialog(_outputConsole);
            progressDialog.Owner = Window.GetWindow(this);
            progressDialog.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            progressDialog.FileConflictAction = detailControl.FileConflictAction;
            progressDialog.Show();

            try
            {
                var actions = await detailControl.ResolveActionsAsync(progressDialog);

                // show preview
                var model = (DetailControlModel)_packageDetail.DataContext;
                if (model.Options.ShowPreviewWindow)
                {
                    var shouldContinue = PreviewActions(actions);
                    if (!shouldContinue)
                    {
                        return;
                    }
                }

                // show license agreeement
                bool acceptLicense = ShowLicenseAgreement(actions);
                if (!acceptLicense)
                {
                    return;
                }

                // Create the executor and execute the actions
                var userAction = detailControl.GetUserAction();                
                var executor = new ActionExecutor();
                await Task.Run(
                    () =>
                    {
                        executor.ExecuteActions(actions, progressDialog, userAction);
                    });

                UpdatePackageStatus();
                detailControl.Refresh();
            }
            catch (Exception ex)
            {
                var errorDialog = new ErrorReportingDialog(
                    ex.Message,
                    ex.ToString());
                errorDialog.ShowModal();
            }
            finally
            {
                progressDialog.CloseWindow();
            }
        }