public void MarkAllProductsComplete()
        {
            if (_installHelper.IsRebootNeeded)
            {
                Helper.ShowErrorMessageAndExit("Reboot the system and restart the tool");
            }

            try
            {
                foreach (var keyvalue in _productControlMap)
                {
                    keyvalue.Value.UpdateStatus("Finished", true);
                }

                _installHelper.LogInformation("All products installed successfully");
                _installHelper.Dispose();
            }
            catch (Exception ex)
            {
                TraceHelper.Tracer.WriteTrace(ex.ToString());
                _installHelper.LogInformation(ex.ToString());
                _installHelper.Dispose();
            }

            if (Helper.IisVersion < 7)
            {
                _worker = new BackgroundWorker();

                _worker.DoWork += (object doWorkSender, DoWorkEventArgs doWorkEventArgs) =>
                {
                    this.Invoke(new MethodInvoker(delegate()
                    {
                        this.busyPictureBox.Visible = this.busyMessageLabel.Visible = true;
                        this.busyMessageLabel.Text  = "Installing DacFx and Upgrading Web Deploy to 3.6. Please wait";
                    }));
                    var msiArray = Helper.Is64Bit
                        ? MigrationConstants.DacFxMsiArray64bit
                        : MigrationConstants.DacFxMsiArray32bit;

                    foreach (var id in msiArray)
                    {
                        string path = Helper.GetMsiFile(string.Format(MigrationConstants.DacfxUrlFormat, id),
                                                        id + ".msi");
                        Helper.ExecuteFile(string.Format(" /q /i \"{0}\"", path));
                    }

                    var webDeploy = Helper.Is64Bit
                        ? MigrationConstants.WebDeployMSI64
                        : MigrationConstants.WebDeployMSI32;

                    string filepath = Helper.GetMsiFile(webDeploy, "webdeploy3.6beta.msi");
                    Helper.ExecuteFile(string.Format(" /q /i \"{0}\"", filepath));
                };

                _worker.RunWorkerCompleted +=
                    (object runWorkerCompletedSender, RunWorkerCompletedEventArgs runWorkerCompletedEventArgs) =>
                {
                    // Hide busy animation.
                    this.busyPictureBox.Visible = this.busyMessageLabel.Visible = false;
                    if (runWorkerCompletedEventArgs.Error != null)
                    {
                        Helper.ShowErrorMessageAndExit(runWorkerCompletedEventArgs.Error.Message);
                    }

                    this.Invoke(
                        new MethodInvoker(delegate() { FireGoToEvent(WizardSteps.RemoteComputerInfo, null); }));
                };

                _worker.RunWorkerAsync();
            }
            else
            {
                this.Invoke(new MethodInvoker(delegate() { FireGoToEvent(WizardSteps.RemoteComputerInfo, null); }));
            }
        }