/// <summary> /// Installs the Windows Management Console to the specified path. /// </summary> /// <param name="completionCallback">The completion callback.</param> public void InstallWindowsConsole(Action <bool> completionCallback) { if (!this.CanInstallWindowsConsole(this.WindowsConsoleInstallLocation)) { return; } var installTask = Task.Run(() => { _logger.Log("Installing SACS Windows Console Manager"); WizardManager wizard = WizardManager.Current; string tempPath = Path.Combine(Path.GetTempPath(), "SACS.Windows"); try { wizard.ShowProgressDialog(); wizard.UpdateProgressValue(0); wizard.UpdateProgressText("Extracting files..."); FileSystemUtilities.ExtractFromResource("SACS.Setup.Resources.SACS.Windows.zip", tempPath, "SACS.Windows"); wizard.UpdateProgressValue(0.2m); Thread.Sleep(300); wizard.UpdateProgressText("Backing up files..."); FileSystemUtilities.BackupDirectory(this.WindowsConsoleInstallLocation, "SACS.Windows"); wizard.UpdateProgressValue(0.5m); Thread.Sleep(300); wizard.UpdateProgressText("Copying over files..."); this.CopyServerFiles(tempPath, this.WindowsConsoleInstallLocation); wizard.UpdateProgressValue(0.8m); Thread.Sleep(300); // create shortcut if new installation. if (!this.IsWindowsConsoleUpgrade) { wizard.UpdateProgressText("Creating shortcut..."); AddWindowsShortcut(Path.Combine(this.WindowsConsoleInstallLocation, "SACS.Windows.exe")); } wizard.UpdateProgressValue(1m); Thread.Sleep(1000); wizard.HideProgressDialog(); wizard.PerformOnUI(() => completionCallback(true)); } catch (InstallException ie) { _logger.Log("InstallWindowsConsole exception", ie); wizard.HideProgressDialog(); wizard.PerformOnUI(() => completionCallback(false)); } }); }
/// <summary> /// Copies the server files. /// </summary> /// <param name="sourcePath">The source path.</param> /// <param name="targetPath">The target path.</param> /// <exception cref="System.NotImplementedException"></exception> private void CopyServerFiles(string sourcePath, string targetPath) { var exclusions = new List <string> { "AppList.xml*", "*.mdf", "*.ldf", "*.config" }; FileSystemUtilities.DirectoryCopy(sourcePath, targetPath, true, exclusions); }
/// <summary> /// Installs the server to the specified path. /// </summary> /// <param name="completionCallback">The completion callback.</param> public void InstallServer(Action <bool> completionCallback) { if (!this.CanInstallServer(this.ServerInstallLocation)) { return; } var installTask = Task.Run(() => { WizardManager wizard = WizardManager.Current; string tempPath = Path.Combine(Path.GetTempPath(), "SACS.WindowsService"); try { _logger.Log("Installing SACS server"); wizard.ShowProgressDialog(); wizard.UpdateProgressValue(0); wizard.UpdateProgressText("Extracting files..."); FileSystemUtilities.ExtractFromResource("SACS.Setup.Resources.SACS.WindowsService.zip", tempPath, "SACS.WindowsService"); wizard.UpdateProgressValue(0.2m); Thread.Sleep(300); wizard.UpdateProgressText("Stopping agent..."); if (!this.TryStopService()) { throw new InstallException("Could not stop agent"); } wizard.UpdateProgressValue(0.4m); Thread.Sleep(300); wizard.UpdateProgressText("Backing up files..."); FileSystemUtilities.BackupDirectory(this.ServerInstallLocation, "SACS.WindowsService"); wizard.UpdateProgressValue(0.6m); Thread.Sleep(300); wizard.UpdateProgressText("Copying over files..."); this.CopyServerFiles(tempPath, this.ServerInstallLocation); wizard.UpdateProgressValue(0.8m); Thread.Sleep(300); // register SACS if a new installation if (!this.IsServerUpgrade) { _logger.Log("Registering service"); wizard.UpdateProgressText("Registering SACS Agent as a Windows service..."); FileInfo exeFile = new FileInfo(this.ServerInstallLocation + "\\SACS.WindowsService.exe"); if (exeFile.Exists) { Process.Start(new ProcessStartInfo { FileName = exeFile.FullName, Arguments = "install" }); } else { MessageBox.Show("Installation corrupt: executable file missing from installation. Aborting.", "Server install error", MessageBoxButtons.OK, MessageBoxIcon.Error); throw new InstallException("SACS.WindowsService.exe missing"); } } wizard.UpdateProgressValue(1m); Thread.Sleep(1000); wizard.HideProgressDialog(); wizard.PerformOnUI(() => completionCallback(true)); } catch (InstallException ie) { _logger.Log("InstallServer exception", ie); wizard.HideProgressDialog(); wizard.PerformOnUI(() => completionCallback(false)); } }); }