using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Configuration.Install; using System.Linq; using System.Reflection; using System.Threading; using System.Windows.Forms; using System.Drawing; using AnywhereTS.DBSupport; using System.Data.SqlClient; namespace AnywhereTS { [RunInstaller(true)] public partial class ATSAmdin : System.Configuration.Install.Installer { string DBServer; string DBInstance; public ATSAmdin() { InitializeComponent(); } #region Install Members DatabaseInstallerWaitDialog dlg; public void InstallDatabaseWaitMessage() { dlg = new DatabaseInstallerWaitDialog("", string.Format(@"Please Wait... Installing database: {2} to {0}\{1}", DBServer, DBInstance, ATSGlobals.strDatabaseName)); dlg.ForeColor = Color.Black; dlg.ShowDialog(); } private void InstallDatabase() { // install the database Thread db_installer_thread = new Thread(new ThreadStart(InstallDatabaseWaitMessage)); db_installer_thread.IsBackground = true; db_installer_thread.Start(); Logging.ATSAdminInstallerLog.DebugFormat(@"Installing database: {2} to {0}\{1}", DBServer, DBInstance, ATSGlobals.strDatabaseName); AnywhereTS.DatabaseSupport dbsup = new DatabaseSupport(); dbsup.SetupDatabase(); dlg.Message = string.Format(@"Successfully installed the database: {2} to {0}\{1}", DBServer, DBInstance, ATSGlobals.strDatabaseName); dlg.ForeColor = Color.Green; Thread.Sleep(new TimeSpan(0, 0, 15)); dlg.Close(); Logging.ATSAdminInstallerLog.DebugFormat(@"Successfully Installed database: {2} to {0}\{1}", DBServer, DBInstance, ATSGlobals.strDatabaseName); } private void ConfigureATS() { try { Logging.ATSAdminInstallerLog.Debug("Configuring AnywhereTS"); frmAdmin atsadmin = new frmAdmin(); if (!atsadmin.ConfigureATS()) { throw new Exception("AnywhereTS cannot be installed without configuring it first."); } Logging.ATSAdminInstallerLog.Debug("Successfully Configured AnywhereTS"); } catch (Exception ex) { // database install failed using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString()))) { Logging.ATSAdminInstallerLog.Error("ConfigureATS() failed."); } throw ex; } } public override void Install(IDictionary stateSaver) { base.Install(stateSaver); try { string path = this.Context.Parameters["targetdir"]; Logging.UpdateLogPath(string.Format(@"{0}\logs", path)); using (log4net.NDC.Push("Logged from ATSAdmin.Installer")) { // setup database DBServer = this.Context.Parameters["DBSERVER"]; DBInstance = this.Context.Parameters["DBINSTANCE"]; // Log the entered data Logging.ATSAdminInstallerLog.DebugFormat("Server={0} Instance={1}", DBServer, DBInstance); CreateRegistryConfigKeys(); ATSGlobals.SetATSRegValue(ProSupport.strRegDatabaseServer, DBServer); ATSGlobals.SetATSRegValue(ProSupport.strRegDatabaseInstance, DBInstance); ProSupport.strDatabaseServer = ATSGlobals.GetATSRegValueString(ProSupport.strRegDatabaseServer); ProSupport.strDatabaseInstance = ATSGlobals.GetATSRegValueString(ProSupport.strRegDatabaseInstance); InstallDatabase(); ConfigureATS(); } } catch (Exception ex) { Logging.ATSAdminInstallerLog.DebugFormat(@"Failed to Install database: {2} to {0}\{1}", DBServer, DBInstance, ATSGlobals.strDatabaseName); dlg.Message = string.Format(@"Failed to install the database: {2} to {0}\{1}", DBServer, DBInstance, ATSGlobals.strDatabaseName); dlg.ForeColor = Color.Red; Thread.Sleep(new TimeSpan(0, 0, 15)); dlg.Close(); // database install failed using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString()))) { Logging.ATSAdminInstallerLog.Error("Install() failed."); } throw ex; } } private void CreateRegistryConfigKeys() { try { Microsoft.Win32.RegistryKey key = null; if (IntPtr.Size == 8) { // 64 bit OS //string t = @"SOFTWARE\Wow6432Node\" + ATSGlobals.ApplicationName + @"\ts-config"; key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\", true); key.CreateSubKey("TFTPD32").CreateSubKey("DHCP"); key = key.CreateSubKey(ATSGlobals.ApplicationName).CreateSubKey("ts-config"); } else { // 32 bit OS //strATSregRoot = @"SOFTWARE\" + ATSGlobals.ApplicationName + @"\ts-config"; key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software", true); key.CreateSubKey("TFTPD32").CreateSubKey("DHCP"); key = key.CreateSubKey(ATSGlobals.ApplicationName).CreateSubKey("ts-config"); } // AdminVersion = 2 key.SetValue("AdminVersion", 2); // RunFirstTime = 1 key.SetValue("RunFirstTime", 1); ATSGlobals.CreateRegistryValues(); } catch (Exception ex) { using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString()))) { Logging.ATSAdminInstallerLog.Error("CreateRegistryConfigKeys() failed."); } } } #endregion public override void Uninstall(IDictionary savedState) { using (log4net.NDC.Push("Logged from ATSAdmin.Installer")) { try { string path = this.Context.Parameters["targetdir"]; Logging.ATSAdminInstallerLog.DebugFormat("Install Dir: {0}", path); Logging.UpdateLogPath(string.Format(@"{0}\logs", path)); Logging.ATSAdminInstallerLog.DebugFormat("Showing uninstall dialog"); UninstallDialog udlg = new UninstallDialog(); DialogResult result = udlg.ShowDialog(); if (result == DialogResult.Cancel) { Logging.ATSAdminInstallerLog.DebugFormat("user aborted uninstall"); MessageBox.Show("Uninstall canceled ... nothing was uninstalled", "Uinstall was canceled by user", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } base.Uninstall(savedState); using (log4net.NDC.Push(string.Format("KeepDatabase={0} KeepApplicationSettings={1} KeepClientImages={2}", udlg.KeepDatabase, udlg.KeepApplicationSettings, udlg.KeepClientImages))) { Logging.ATSAdminInstallerLog.DebugFormat("Unistall options"); } string server = ATSGlobals.GetATSRegValueString(ProSupport.strRegDatabaseServer); string instance = ATSGlobals.GetATSRegValueString(ProSupport.strRegDatabaseInstance); string database = ATSGlobals.strDatabaseName; if (!udlg.KeepDatabase) { Exception ErrorInfo = null; // delete database using (MsSqlConnector conn = new MsSqlConnector(server, instance, "master")) { try { conn.CreateConnection(out ErrorInfo); conn.OpenConnection(out ErrorInfo); SqlConnection sqlCon; conn.GetConnectionClone(out sqlCon, out ErrorInfo); SqlCommand sqlCmd = new SqlCommand(); sqlCmd.Connection = sqlCon; Logging.ATSAdminInstallerLog.DebugFormat("Removing database: {0}", database); sqlCmd.CommandText = string.Format("DROP DATABASE {0};",database); sqlCmd.ExecuteNonQuery(); Logging.ATSAdminInstallerLog.DebugFormat("Successfully removed database: {0}", database); } catch (Exception ex) { Logging.ATSAdminInstallerLog.DebugFormat("Failed to remove database: {0}", database); ErrorInfo = ex; } } if (ErrorInfo != null) throw ErrorInfo; } if (!udlg.KeepApplicationSettings) { // delete registry settings try { Logging.ATSAdminInstallerLog.DebugFormat("Removing AnywhereTS Registry settings"); Microsoft.Win32.RegistryKey key = null; if (IntPtr.Size == 8) { // 64 bit OS //string t = @"SOFTWARE\Wow6432Node\" + ATSGlobals.ApplicationName + @"\ts-config"; key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\", true); key.DeleteSubKey("TFTPD32", false); key.DeleteSubKey(ATSGlobals.ApplicationName, false); } else { // 32 bit OS //strATSregRoot = @"SOFTWARE\" + ATSGlobals.ApplicationName + @"\ts-config"; key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software", true); key.DeleteSubKey("TFTPD32", false); key.DeleteSubKey(ATSGlobals.ApplicationName, false); } Logging.ATSAdminInstallerLog.DebugFormat("Successfully removed AnywhereTS Registry settings"); } catch (Exception ex) { Logging.ATSAdminInstallerLog.DebugFormat("Failed to remove AnywhereTS Registry settings"); throw ex; } } if (!udlg.KeepClientImages) { // delete client images try { } catch (Exception ex) { } } } catch (Exception ex) { // database install failed using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString()))) { Logging.ATSAdminInstallerLog.Error("Install() failed."); } throw ex; } } } } }