Parent Directory
|
Revision Log
|
Patch
--- trunk/TSAdminTool/ATSAmdin.Installer.cs 2012/07/15 11:21:36 149 +++ trunk/TSAdminTool/ATSAmdin.Installer.cs 2012/07/15 15:18:55 157 @@ -5,6 +5,11 @@ 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 @@ -12,69 +17,240 @@ [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); - string path = this.Context.Parameters["targetdir"]; - Logging.SetLogPath(path); - //// load files into app domain - //AssemblyName asm_log4net = Assembly.LoadFile(string.Format(@"{0}\log4net.dll", path)).GetName(); - //AssemblyName asm_logging = Assembly.LoadFile(string.Format(@"{0}\AnywhereTS.Logging.dll", path)).GetName(); - //AppDomain.CurrentDomain.Load(asm_log4net); - //AppDomain.CurrentDomain.Load(asm_logging); + 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")) - { - // setup database - string DBServer = this.Context.Parameters["DBSERVER"]; - string DBInstance = this.Context.Parameters["DBINSTANCE"]; - // Log the entered data - Logging.ATSAdminLog.DebugFormat("Server={0} Instance={1}", DBServer, DBInstance); - CreateRegistryConfigKeys(); - ATSGlobals.SetATSRegValue(ProSupport.strRegDatabaseServer, DBServer); - ATSGlobals.SetATSRegValue(ProSupport.strRegDatabaseInstance, DBInstance); - // install the database + { try { - AnywhereTS.DatabaseSupport dbsup = new DatabaseSupport(); - dbsup.SetupDatabase(); + 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; } } } - - private void CreateRegistryConfigKeys() - { - 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(); - } } }
ViewVC Help | |
Powered by ViewVC 1.1.22 |