Example #1
0
        public static object Update(object obj)
        {
            Hashtable args = Utils.GetSetupParameters(obj);

            var setupVariables = new SetupVariables
            {
                ComponentId     = Utils.GetStringSetupParameter(args, Global.Parameters.ComponentId),
                SetupAction     = SetupActions.Update,
                BaseDirectory   = Utils.GetStringSetupParameter(args, Global.Parameters.BaseDirectory),
                UpdateVersion   = Utils.GetStringSetupParameter(args, "UpdateVersion"),
                InstallerFolder = Utils.GetStringSetupParameter(args, Global.Parameters.InstallerFolder),
                Installer       = Utils.GetStringSetupParameter(args, Global.Parameters.Installer),
                InstallerType   = Utils.GetStringSetupParameter(args, Global.Parameters.InstallerType),
                InstallerPath   = Utils.GetStringSetupParameter(args, Global.Parameters.InstallerPath)
            };

            AppConfig.LoadConfiguration();

            InstallerForm form   = new InstallerForm();
            Wizard        wizard = form.Wizard;

            //
            wizard.SetupVariables = setupVariables;
            //
            AppConfig.LoadComponentSettings(wizard.SetupVariables);

            IntroductionPage     introPage = new IntroductionPage();
            LicenseAgreementPage licPage   = new LicenseAgreementPage();
            ExpressInstallPage   page2     = new ExpressInstallPage();
            //create install currentScenario
            InstallAction action = new InstallAction(ActionTypes.Backup);

            action.Description = "Backing up...";
            page2.Actions.Add(action);

            action             = new InstallAction(ActionTypes.DeleteFiles);
            action.Description = "Deleting files...";
            action.Path        = "setup\\delete.txt";
            page2.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CopyFiles);
            action.Description = "Copying files...";
            page2.Actions.Add(action);

            action             = new InstallAction(ActionTypes.UpdateConfig);
            action.Description = "Updating system configuration...";
            page2.Actions.Add(action);

            FinishPage page3 = new FinishPage();

            wizard.Controls.AddRange(new Control[] { introPage, licPage, page2, page3 });
            wizard.LinkPages();
            wizard.SelectedPage = introPage;

            //show wizard
            IWin32Window owner = args[Global.Parameters.ParentForm] as IWin32Window;

            return(form.ShowModal(owner));
        }
Example #2
0
        public static DialogResult Update(object obj)
        {
            Hashtable args = Utils.GetSetupParameters(obj);

            var setupVariables = new SetupVariables
            {
                ComponentId = Utils.GetStringSetupParameter(args, Global.Parameters.ComponentId),
                SetupAction = SetupActions.Update,
                IISVersion  = Global.IISVersion
            };

            AppConfig.LoadConfiguration();

            InstallerForm form   = new InstallerForm();
            Wizard        wizard = form.Wizard;

            wizard.SetupVariables = setupVariables;
            //
            AppConfig.LoadComponentSettings(wizard.SetupVariables);

            IntroductionPage     introPage = new IntroductionPage();
            LicenseAgreementPage licPage   = new LicenseAgreementPage();
            ExpressInstallPage   page2     = new ExpressInstallPage();
            //create install currentScenario
            InstallAction action = new InstallAction(ActionTypes.Backup);

            action.Description = "Backing up...";
            page2.Actions.Add(action);

            action             = new InstallAction(ActionTypes.DeleteFiles);
            action.Description = "Deleting files...";
            action.Path        = "setup\\delete.txt";
            page2.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CopyFiles);
            action.Description = "Copying files...";
            page2.Actions.Add(action);

            action             = new InstallAction(ActionTypes.ExecuteSql);
            action.Description = "Updating database...";
            action.Path        = "setup\\update_db.sql";
            page2.Actions.Add(action);

            action             = new InstallAction(ActionTypes.UpdateConfig);
            action.Description = "Updating system configuration...";
            page2.Actions.Add(action);

            FinishPage page3 = new FinishPage();

            wizard.Controls.AddRange(new Control[] { introPage, licPage, page2, page3 });
            wizard.LinkPages();
            wizard.SelectedPage = introPage;

            //show wizard
            Form parentForm = args[Global.Parameters.ParentForm] as Form;

            return(form.ShowDialog(parentForm));
        }
Example #3
0
        public static DialogResult Setup(object obj)
        {
            Hashtable args         = Utils.GetSetupParameters(obj);
            string    shellVersion = Utils.GetStringSetupParameter(args, "ShellVersion");
            //
            var setupVariables = new SetupVariables
            {
                ComponentId       = Utils.GetStringSetupParameter(args, Global.Parameters.ComponentId),
                ConfigurationFile = "web.config",
                IISVersion        = Global.IISVersion,
                SetupAction       = SetupActions.Setup
            };

            //
            AppConfig.LoadConfiguration();

            InstallerForm form   = new InstallerForm();
            Wizard        wizard = form.Wizard;

            wizard.SetupVariables = setupVariables;
            //
            AppConfig.LoadComponentSettings(wizard.SetupVariables);

            //IntroductionPage page1 = new IntroductionPage();
            WebPage page1 = new WebPage();
            ServerAdminPasswordPage page2 = new ServerAdminPasswordPage();
            ExpressInstallPage      page3 = new ExpressInstallPage();
            //create install currentScenario
            InstallAction action = new InstallAction(ActionTypes.UpdateWebSite);

            action.Description = "Updating web site...";
            page3.Actions.Add(action);

            action             = new InstallAction(ActionTypes.UpdateServerAdminPassword);
            action.Description = "Updating serveradmin password...";
            page3.Actions.Add(action);

            action             = new InstallAction(ActionTypes.UpdateConfig);
            action.Description = "Updating system configuration...";
            page3.Actions.Add(action);


            FinishPage page4 = new FinishPage();

            wizard.Controls.AddRange(new Control[] { page1, page2, page3, page4 });
            wizard.LinkPages();
            wizard.SelectedPage = page1;

            //show wizard
            IWin32Window owner = args[Global.Parameters.ParentForm] as IWin32Window;

            return(form.ShowModal(owner));
        }
Example #4
0
        public static DialogResult SetupBase(object obj)
        {
            Hashtable args         = Utils.GetSetupParameters(obj);
            string    shellVersion = Utils.GetStringSetupParameter(args, "ShellVersion");
            string    componentId  = Utils.GetStringSetupParameter(args, "ComponentId");

            AppConfig.LoadConfiguration();

            InstallerForm form   = new InstallerForm();
            Wizard        wizard = form.Wizard;

            wizard.SetupVariables.SetupAction = SetupActions.Setup;
            LoadSetupVariablesFromConfig(wizard.SetupVariables, componentId);
            wizard.SetupVariables.WebSiteId           = AppConfig.GetComponentSettingStringValue(componentId, "WebSiteId");
            wizard.SetupVariables.WebSiteIP           = AppConfig.GetComponentSettingStringValue(componentId, "WebSiteIP");
            wizard.SetupVariables.WebSitePort         = AppConfig.GetComponentSettingStringValue(componentId, "WebSitePort");
            wizard.SetupVariables.WebSiteDomain       = AppConfig.GetComponentSettingStringValue(componentId, "WebSiteDomain");
            wizard.SetupVariables.NewWebSite          = AppConfig.GetComponentSettingBooleanValue(componentId, "NewWebSite");
            wizard.SetupVariables.NewVirtualDirectory = AppConfig.GetComponentSettingBooleanValue(componentId, "NewVirtualDirectory");
            wizard.SetupVariables.VirtualDirectory    = AppConfig.GetComponentSettingStringValue(componentId, "VirtualDirectory");
            wizard.SetupVariables.IISVersion          = Utils.GetVersionSetupParameter(args, "IISVersion");
            //IntroductionPage page1 = new IntroductionPage();
            WebPage            page2 = new WebPage();
            ExpressInstallPage page3 = new ExpressInstallPage();
            //create install currentScenario
            InstallAction action = new InstallAction(ActionTypes.UpdateWebSite);

            action.Description = "Updating web site...";
            page3.Actions.Add(action);

            action             = new InstallAction(ActionTypes.UpdateConfig);
            action.Description = "Updating system configuration...";
            page3.Actions.Add(action);

            FinishPage page4 = new FinishPage();

            wizard.Controls.AddRange(new Control[] { page2, page3, page4 });
            wizard.LinkPages();
            wizard.SelectedPage = page2;

            //show wizard
            IWin32Window owner = args["ParentForm"] as IWin32Window;

            return(form.ShowModal(owner));
        }
Example #5
0
        public static DialogResult Uninstall(object obj)
        {
            Hashtable args         = Utils.GetSetupParameters(obj);
            string    shellVersion = Utils.GetStringSetupParameter(args, Global.Parameters.ShellVersion);
            //
            var setupVariables = new SetupVariables
            {
                ComponentId = Utils.GetStringSetupParameter(args, Global.Parameters.ComponentId),
                IISVersion  = Global.IISVersion,
                SetupAction = SetupActions.Uninstall
            };

            //
            AppConfig.LoadConfiguration();

            InstallerForm form   = new InstallerForm();
            Wizard        wizard = form.Wizard;

            wizard.SetupVariables = setupVariables;
            //
            AppConfig.LoadComponentSettings(wizard.SetupVariables);
            //
            IntroductionPage     page1 = new IntroductionPage();
            ConfirmUninstallPage page2 = new ConfirmUninstallPage();
            UninstallPage        page3 = new UninstallPage();
            //create uninstall currentScenario
            InstallAction action = new InstallAction(ActionTypes.DeleteShortcuts);

            action.Description = "Deleting shortcuts...";
            action.Log         = "- Delete shortcuts";
            action.Name        = "Login to SolidCP.url";
            page3.Actions.Add(action);
            page2.UninstallPage = page3;

            FinishPage page4 = new FinishPage();

            wizard.Controls.AddRange(new Control[] { page1, page2, page3, page4 });
            wizard.LinkPages();
            wizard.SelectedPage = page1;

            //show wizard
            IWin32Window owner = args[Global.Parameters.ParentForm] as IWin32Window;

            return(form.ShowModal(owner));
        }
Example #6
0
        /// <summary>
        /// Displays process progress.
        /// </summary>
        public void Start()
        {
            this.progressBar.Value = 0;

            string  component   = Wizard.SetupVariables.ComponentFullName;
            string  componentId = Wizard.SetupVariables.ComponentId;
            Version iisVersion  = Wizard.SetupVariables.IISVersion;
            bool    iis7        = (iisVersion.Major >= 7);

            try
            {
                this.lblProcess.Text = "Creating uninstall script...";
                this.Update();

                //default actions
                List <InstallAction> actions = GetUninstallActions(componentId);

                //add external actions
                foreach (InstallAction extAction in Actions)
                {
                    actions.Add(extAction);
                }

                //process actions
                for (int i = 0, progress = 1; i < actions.Count; i++, progress++)
                {
                    InstallAction action = actions[i];
                    this.lblProcess.Text   = action.Description;
                    this.progressBar.Value = progress * 100 / actions.Count;
                    this.Update();

                    try
                    {
                        switch (action.ActionType)
                        {
                        case ActionTypes.DeleteRegistryKey:
                            DeleteRegistryKey(action.Key, action.Empty);
                            break;

                        case ActionTypes.DeleteDirectory:
                            DeleteDirectory(action.Path);
                            break;

                        case ActionTypes.DeleteDatabase:
                            DeleteDatabase(
                                action.ConnectionString,
                                action.Name);
                            break;

                        case ActionTypes.DeleteDatabaseUser:
                            DeleteDatabaseUser(
                                action.ConnectionString,
                                action.UserName);
                            break;

                        case ActionTypes.DeleteDatabaseLogin:
                            DeleteDatabaseLogin(
                                action.ConnectionString,
                                action.UserName);
                            break;

                        case ActionTypes.DeleteWebSite:
                            if (iis7)
                            {
                                DeleteIIS7WebSite(action.SiteId);
                            }
                            else
                            {
                                DeleteWebSite(action.SiteId);
                            }
                            break;

                        case ActionTypes.DeleteVirtualDirectory:
                            DeleteVirtualDirectory(
                                action.SiteId,
                                action.Name);
                            break;

                        case ActionTypes.DeleteUserMembership:
                            DeleteUserMembership(action.Domain, action.Name, action.Membership);
                            break;

                        case ActionTypes.DeleteUserAccount:
                            DeleteUserAccount(action.Domain, action.Name);
                            break;

                        case ActionTypes.DeleteApplicationPool:
                            if (iis7)
                            {
                                DeleteIIS7ApplicationPool(action.Name);
                            }
                            else
                            {
                                DeleteApplicationPool(action.Name);
                            }
                            break;

                        case ActionTypes.UpdateConfig:
                            UpdateSystemConfiguration(action.Key);
                            break;

                        case ActionTypes.DeleteShortcuts:
                            DeleteShortcuts(action.Name);
                            break;

                        case ActionTypes.UnregisterWindowsService:
                            UnregisterWindowsService(action.Path, action.Name);
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        if (!Utils.IsThreadAbortException(ex))
                        {
                            Log.WriteError("Uninstall error", ex);
                        }
                    }
                }
                this.progressBar.Value = 100;
            }
            catch (Exception ex)
            {
                if (Utils.IsThreadAbortException(ex))
                {
                    return;
                }

                ShowError();
                this.Wizard.Close();
            }

            this.lblProcess.Text = "Completed. Click Next to continue.";
            this.AllowMoveNext   = true;
            this.AllowCancel     = true;
        }
Example #7
0
        internal List <InstallAction> GetUninstallActions(string componentId)
        {
            var           list   = new List <InstallAction>();
            InstallAction action = null;

            //windows service
            string serviceName   = AppConfig.GetComponentSettingStringValue(componentId, "ServiceName");
            string serviceFile   = AppConfig.GetComponentSettingStringValue(componentId, "ServiceFile");
            string installFolder = AppConfig.GetComponentSettingStringValue(componentId, "InstallFolder");

            if (!string.IsNullOrEmpty(serviceName) && !string.IsNullOrEmpty(serviceFile))
            {
                action             = new InstallAction(ActionTypes.UnregisterWindowsService);
                action.Path        = Path.Combine(installFolder, serviceFile);
                action.Name        = serviceName;
                action.Description = "Removing Windows service...";
                action.Log         = string.Format("- Remove {0} Windows service", serviceName);
                list.Add(action);
            }

            if (ServiceController.GetServices().Any(s => s.DisplayName.Equals(Global.Parameters.SchedulerServiceName, StringComparison.CurrentCultureIgnoreCase)))
            {
                action = new InstallAction(ActionTypes.UnregisterWindowsService)
                {
                    Path = Path.Combine(installFolder, "bin", Global.Parameters.SchedulerServiceFileName), Name = Global.Parameters.SchedulerServiceName, Description = "Removing Windows service..."
                };
                action.Log = string.Format("- Remove {0} Windows service", action.Name);
                list.Add(action);
            }

            //database
            bool deleteDatabase = AppConfig.GetComponentSettingBooleanValue(componentId, "NewDatabase");

            if (deleteDatabase)
            {
                string connectionString = AppConfig.GetComponentSettingStringValue(componentId, "InstallConnectionString");
                string database         = AppConfig.GetComponentSettingStringValue(componentId, "Database");
                action = new InstallAction(ActionTypes.DeleteDatabase);
                action.ConnectionString = connectionString;
                action.Name             = database;
                action.Description      = "Deleting database...";
                action.Log = string.Format("- Delete {0} database", database);
                list.Add(action);
            }
            //database user
            bool deleteDatabaseUser = AppConfig.GetComponentSettingBooleanValue(componentId, "NewDatabaseUser");

            if (deleteDatabaseUser)
            {
                string connectionString = AppConfig.GetComponentSettingStringValue(componentId, "InstallConnectionString");
                string username         = AppConfig.GetComponentSettingStringValue(componentId, "DatabaseUser");
                action = new InstallAction(ActionTypes.DeleteDatabaseUser);
                action.ConnectionString = connectionString;
                action.UserName         = username;
                action.Description      = "Deleting database user...";
                action.Log = string.Format("- Delete {0} database user", username);
                list.Add(action);
            }
            //database login (from standalone setup)
            string loginName = AppConfig.GetComponentSettingStringValue(componentId, "DatabaseLogin");

            if (!string.IsNullOrEmpty(loginName))
            {
                string connectionString = AppConfig.GetComponentSettingStringValue(componentId, "InstallConnectionString");
                action = new InstallAction(ActionTypes.DeleteDatabaseLogin);
                action.ConnectionString = connectionString;
                action.UserName         = loginName;
                action.Description      = "Deleting database login...";
                action.Log = string.Format("- Delete {0} database login", loginName);
                list.Add(action);
            }



            //virtual directory
            bool deleteVirtualDirectory = AppConfig.GetComponentSettingBooleanValue(componentId, "NewVirtualDirectory");

            if (deleteVirtualDirectory)
            {
                string virtualDirectory       = AppConfig.GetComponentSettingStringValue(componentId, "VirtualDirectory");
                string virtualDirectorySiteId = AppConfig.GetComponentSettingStringValue(componentId, "WebSiteId");
                action             = new InstallAction(ActionTypes.DeleteVirtualDirectory);
                action.SiteId      = virtualDirectorySiteId;
                action.Name        = virtualDirectory;
                action.Description = "Deleting virtual directory...";
                action.Log         = string.Format("- Delete {0} virtual directory...", virtualDirectory);
                list.Add(action);
            }

            //web site
            bool deleteWebSite = AppConfig.GetComponentSettingBooleanValue(componentId, "NewWebSite");

            if (deleteWebSite)
            {
                string siteId = AppConfig.GetComponentSettingStringValue(componentId, "WebSiteId");
                action             = new InstallAction(ActionTypes.DeleteWebSite);
                action.SiteId      = siteId;
                action.Description = "Deleting web site...";
                action.Log         = string.Format("- Delete {0} web site", siteId);
                list.Add(action);
            }

            //application pool
            bool deleteAppPool = AppConfig.GetComponentSettingBooleanValue(componentId, "NewApplicationPool");

            if (deleteAppPool)
            {
                string appPoolName = AppConfig.GetComponentSettingStringValue(componentId, "ApplicationPool");
                if (string.IsNullOrEmpty(appPoolName))
                {
                    appPoolName = WebUtils.SolidCP_ADMIN_POOL;
                }
                action             = new InstallAction(ActionTypes.DeleteApplicationPool);
                action.Name        = appPoolName;
                action.Description = "Deleting application pool...";
                action.Log         = string.Format("- Delete {0} application pool", appPoolName);
                list.Add(action);
            }

            //user account
            bool deleteUserAccount = AppConfig.GetComponentSettingBooleanValue(componentId, "NewUserAccount");

            if (deleteUserAccount)
            {
                string username = AppConfig.GetComponentSettingStringValue(componentId, "UserAccount");
                string domain   = AppConfig.GetComponentSettingStringValue(componentId, "Domain");
                //membership
                if (Wizard.SetupVariables.UserMembership != null && Wizard.SetupVariables.UserMembership.Length > 0)
                {
                    action             = new InstallAction(ActionTypes.DeleteUserMembership);
                    action.Name        = username;
                    action.Domain      = domain;
                    action.Membership  = Wizard.SetupVariables.UserMembership;
                    action.Description = "Removing user account membership...";
                    action.Log         = string.Format("- Remove {0} user account membership", username);
                    list.Add(action);
                }

                action             = new InstallAction(ActionTypes.DeleteUserAccount);
                action.Name        = username;
                action.Domain      = domain;
                action.Description = "Deleting user account...";
                action.Log         = string.Format("- Delete {0} user account", username);
                list.Add(action);
            }

            //directory
            string path = AppConfig.GetComponentSettingStringValue(componentId, "InstallFolder");

            if (!string.IsNullOrEmpty(path))
            {
                action             = new InstallAction(ActionTypes.DeleteDirectory);
                action.Path        = path;
                action.Description = "Deleting application folder...";
                action.Log         = string.Format("- Delete {0} folder", path);
                list.Add(action);
            }

            //config
            action             = new InstallAction(ActionTypes.UpdateConfig);
            action.Key         = componentId;
            action.Description = "Updating configuration settings...";
            action.Log         = "- Update configuration settings";
            list.Add(action);
            return(list);
        }
Example #8
0
        public static DialogResult UpdateBase(object obj, string minimalInstallerVersion,
                                              string versionsToUpgrade, bool updateSql, InstallAction versionSpecificAction)
        {
            Hashtable args         = Utils.GetSetupParameters(obj);
            string    shellVersion = Utils.GetStringSetupParameter(args, "ShellVersion");

            Version version = new Version(shellVersion);

            if (version < new Version(minimalInstallerVersion))
            {
                MessageBox.Show(
                    string.Format("SolidCP Installer {0} or higher required.", minimalInstallerVersion),
                    "Setup Wizard", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return(DialogResult.Cancel);
            }
            // Load application configuration
            AppConfig.LoadConfiguration();
            //
            var setupVariables = new SetupVariables
            {
                SetupAction = SetupActions.Update,
                ComponentId = Utils.GetStringSetupParameter(args, "ComponentId"),
                IISVersion  = Global.IISVersion,
            };

            // Load setup variables from app.config
            AppConfig.LoadComponentSettings(setupVariables);
            //
            InstallerForm form = new InstallerForm();

            form.Wizard.SetupVariables = setupVariables;
            Wizard wizard = form.Wizard;

            // Initialize setup variables with the data received from update procedure
            wizard.SetupVariables.BaseDirectory   = Utils.GetStringSetupParameter(args, "BaseDirectory");
            wizard.SetupVariables.UpdateVersion   = Utils.GetStringSetupParameter(args, "UpdateVersion");
            wizard.SetupVariables.InstallerFolder = Utils.GetStringSetupParameter(args, "InstallerFolder");
            wizard.SetupVariables.Installer       = Utils.GetStringSetupParameter(args, "Installer");
            wizard.SetupVariables.InstallerType   = Utils.GetStringSetupParameter(args, "InstallerType");
            wizard.SetupVariables.InstallerPath   = Utils.GetStringSetupParameter(args, "InstallerPath");

            #region Support for multiple versions to upgrade from
            // Find out whether the version(s) are supported in that upgrade
            var upgradeSupported = versionsToUpgrade.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                                   .Any(x => { return(VersionEquals(wizard.SetupVariables.Version, x.Trim())); });
            //
            if (upgradeSupported == false)
            {
                Log.WriteInfo(
                    String.Format("Could not find a suitable version to upgrade. Current version: {0}; Versions supported: {1};", wizard.SetupVariables.Version, versionsToUpgrade));
                //
                MessageBox.Show(
                    "Your current software version either is not supported or could not be upgraded at this time. Please send log file from the installer to the software vendor for further research on the issue.", "Setup Wizard", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                //
                return(DialogResult.Cancel);
            }
            #endregion

            //
            IntroductionPage     introPage = new IntroductionPage();
            LicenseAgreementPage licPage   = new LicenseAgreementPage();
            ExpressInstallPage   page2     = new ExpressInstallPage();
            //create install currentScenario
            InstallAction action = new InstallAction(ActionTypes.StopApplicationPool);
            action.Description = "Stopping IIS Application Pool...";
            page2.Actions.Add(action);

            action             = new InstallAction(ActionTypes.Backup);
            action.Description = "Backing up...";
            page2.Actions.Add(action);

            action             = new InstallAction(ActionTypes.DeleteFiles);
            action.Description = "Deleting files...";
            action.Path        = "setup\\delete.txt";
            page2.Actions.Add(action);

            action             = new InstallAction(ActionTypes.CopyFiles);
            action.Description = "Copying files...";
            page2.Actions.Add(action);

            if (versionSpecificAction != null)
            {
                page2.Actions.Add(versionSpecificAction);
            }

            if (updateSql)
            {
                action             = new InstallAction(ActionTypes.ExecuteSql);
                action.Description = "Updating database...";
                action.Path        = "setup\\update_db.sql";
                page2.Actions.Add(action);
            }

            action             = new InstallAction(ActionTypes.UpdateConfig);
            action.Description = "Updating system configuration...";
            page2.Actions.Add(action);

            action             = new InstallAction(ActionTypes.StartApplicationPool);
            action.Description = "Starting IIS Application Pool...";
            page2.Actions.Add(action);

            FinishPage page3 = new FinishPage();
            wizard.Controls.AddRange(new Control[] { introPage, licPage, page2, page3 });
            wizard.LinkPages();
            wizard.SelectedPage = introPage;

            //show wizard
            IWin32Window owner = args["ParentForm"] as IWin32Window;
            return(form.ShowModal(owner));
        }