/[AnywhereTS-MSSQL]/trunk/TSAdminTool/Database.cs
ViewVC logotype

Annotation of /trunk/TSAdminTool/Database.cs

Parent Directory Parent Directory | Revision Log Revision Log


Revision 92 - (hide annotations) (download)
Sat Jul 14 00:55:41 2012 UTC (9 years ago) by william
File size: 32152 byte(s)

1 william 4 using System;
2     using System.Collections.Generic;
3     using System.Text;
4     using System.Data;
5     using System.Data.SqlClient;
6     using System.Windows.Forms;
7     using System.Text.RegularExpressions;
8     using System.Management;
9 william 33 using log4net;
10 william 74 using System.Security.Principal;
11 william 87 using AnywhereTS.DBSupport;
12 william 4
13     namespace AnywhereTS
14     {
15     class DatabaseSupport
16     {
17 william 36
18 william 4 enum VersionCheck
19     {
20 william 21 Failed = 0,
21     Equal,
22     DatabaseIsMoreNew,
23     DatabaseIsOlder,
24     //DatabaseNotFound,
25     DatabaseCreated,
26 william 4 };
27    
28     private SqlConnection sqlCon = new SqlConnection();
29     private SqlCommand sqlCmd = new SqlCommand();
30    
31     const string SQL_BROWSER_SERVICE_NAME = "SQLBrowser";
32 william 90 public static string InstanceName { get { return Properties.Settings.Default.DBInstance; } }
33 william 4 public bool SetupDatabase()
34     {
35 william 87 Exception ErrorInfo = null;
36 william 4 bool bContinue = false;
37     // Create a connection to SQL Server
38 william 92
39     ProSupport.strDatabaseServer = Properties.Settings.Default.DBServer;
40     ProSupport.strDatabaseInstance = Properties.Settings.Default.DBInstance;
41    
42     ATSGlobals.SetATSRegValue(ProSupport.strRegDatabaseServer, ProSupport.strDatabaseServer);
43     ATSGlobals.SetATSRegValue(ProSupport.strRegDatabaseInstance, ProSupport.strRegDatabaseInstance);
44    
45 william 36 Logging.ATSAdminLog.Debug("SetupDatabase() called ");
46 william 87 #region Database Creation support
47     using (MsSqlConnector conn = new MsSqlConnector(Properties.Settings.Default.DBServer, Properties.Settings.Default.DBInstance, ATSGlobals.strDatabaseName))
48 william 4 {
49 william 18 try
50     {
51 william 87 conn.CreateConnection(out ErrorInfo);
52     conn.OpenConnection(out ErrorInfo);
53 william 18 }
54 william 87 catch (Exception ex)
55 william 18 {
56 william 87 try
57     {
58     conn.Dispose();
59     using (MsSqlConnector conn1 = new MsSqlConnector(Properties.Settings.Default.DBServer, Properties.Settings.Default.DBInstance, "master"))
60     {
61     try
62     {
63     conn1.CreateConnection(out ErrorInfo);
64     conn1.OpenConnection(out ErrorInfo);
65 william 39
66 william 87 // create datagbase
67     Logging.ATSAdminLog.Info(string.Format("Creating Database {0}", ATSGlobals.strDatabaseName));
68     RunScript(SQLServerResources.CreateDatabase, conn1, out ErrorInfo);
69     Logging.ATSAdminLog.Info(string.Format("Created Database {0}", ATSGlobals.strDatabaseName));
70    
71     // create tables
72     Logging.ATSAdminLog.Info(string.Format("Creating Tables in {0} Database", ATSGlobals.strDatabaseName));
73     RunScript(SQLServerResources.CreateTables, conn1, out ErrorInfo);
74     Logging.ATSAdminLog.Info(string.Format("Created Tables in {0} Database", ATSGlobals.strDatabaseName));
75     }
76     catch (Exception ex1)
77     {
78     if (ErrorInfo == null) { ErrorInfo = new Exception(ex1.Message, ex); }
79     }
80     }
81     }
82     catch (Exception ex1)
83 william 39 {
84 william 87 if (ErrorInfo == null) { ErrorInfo = new Exception(ex1.Message, ex); }
85 william 39 }
86 william 18 }
87 william 4 }
88 william 87 if (ErrorInfo != null) { return false; }
89     #endregion
90     #region Database version check
91 william 4 // Now that you are connected to Express, check the database versions
92     Version databaseVersion; // The current version of the database
93 william 18 int chkVer = CheckVersion(out databaseVersion);
94     VersionCheck verChk = (VersionCheck)chkVer;
95 william 39 //MessageBox.Show(string.Format("Version Check: {0} Version: {1}", verChk.ToString(), databaseVersion.ToString()));
96 william 87 Logging.ATSAdminLog.InfoFormat("Database Version Check: {0} .... Database Version: {1}", verChk.ToString(), databaseVersion.ToString());
97 william 18 switch (chkVer)
98 william 4 {
99     case (int)VersionCheck.Equal:
100     {
101     bContinue = true;
102     break;
103     }
104     case (int)VersionCheck.Failed:
105     {
106     bContinue = false;
107     break;
108     }
109     case (int)VersionCheck.DatabaseIsOlder:
110     {
111 william 87 using (MsSqlConnector conn = new MsSqlConnector(Properties.Settings.Default.DBServer, Properties.Settings.Default.DBInstance, ATSGlobals.strDatabaseName))
112 william 4 {
113 william 87 try
114     {
115     conn.CreateConnection(out ErrorInfo);
116     conn.OpenConnection(out ErrorInfo);
117     #region database upggrade scripts
118     switch (databaseVersion.ToString())
119 william 4 {
120 william 87 // Run the apropriate upgdrade script(s)
121     case "1.0.0.0":
122     { // Current database is version 1.0.0.0, update to 1.0.0.1
123     Logging.ATSAdminLog.InfoFormat("Upgrading Database from version: {0} to version: {1}", "1.0.0.0", "1.0.0.1");
124     bContinue = RunScript(SQLServerResources.UpdateDatabase1, conn, out ErrorInfo);
125     Logging.ATSAdminLog.InfoFormat("Upgraded Database from version: {0} to version: {1}", "1.0.0.0", "1.0.0.1");
126     goto case "1.0.0.1"; // Continue and upgrade one more step
127     }
128     case "1.0.0.1":
129     { // Current database is version 1.0.0.1, update to 1.0.0.2
130     Logging.ATSAdminLog.InfoFormat("Upgrading Database from version: {0} to version: {1}", "1.0.0.1", "1.0.0.2");
131     bContinue = RunScript(SQLServerResources.UpdateDatabase2, conn, out ErrorInfo);
132     Logging.ATSAdminLog.InfoFormat("Upgraded Database from version: {0} to version: {1}", "1.0.0.2", "1.0.0.2");
133     goto case "1.0.0.2"; // Continue and upgrade one more step
134     }
135     case "1.0.0.2":
136     { // Current database is version 1.0.0.2, update to 1.0.0.3
137     Logging.ATSAdminLog.InfoFormat("Upgrading Database from version: {0} to version: {1}", "1.0.0.2", "1.0.0.3");
138     bContinue = RunScript(SQLServerResources.UpdateDatabase3, conn, out ErrorInfo);
139     Logging.ATSAdminLog.InfoFormat("Upgraded Database from version: {0} to version: {1}", "1.0.0.2", "1.0.0.3");
140     goto case "1.0.0.3"; // Continue and upgrade one more step
141     }
142     case "1.0.0.3":
143     { // Current database is version 1.0.0.3, update to 1.0.0.4
144     Logging.ATSAdminLog.InfoFormat("Upgrading Database from version: {0} to version: {1}", "1.0.0.3", "1.0.0.4");
145     bContinue = RunScript(SQLServerResources.UpdateDatabase4, conn, out ErrorInfo);
146     Logging.ATSAdminLog.InfoFormat("Upgraded Database from version: {0} to version: {1}", "1.0.0.4", "1.0.0.4");
147     break;
148     }
149     default:
150     {
151     //MessageBox.Show("Error: Not able to upgrade database (51188)");
152     if (databaseVersion == new Version(0, 0, 0, 0))
153     {
154     string format = string.Format("Database version is {0}, this should have been auto upgraded to {1}", databaseVersion.ToString(), ATSGlobals.strDatabaseVersion);
155     Logging.ATSAdminLog.Fatal(format);
156     MessageBox.Show(format);
157     }
158     else
159     {
160     string format = string.Format("Failed to upgrade Database from version: {0} to version: {1}", databaseVersion.ToString(), ATSGlobals.strDatabaseVersion);
161     Logging.ATSAdminLog.Fatal(format);
162     MessageBox.Show(format);
163     }
164     break;
165     }
166 william 4 }
167 william 87 #endregion
168     }
169     catch (Exception ex)
170     {
171     if (ErrorInfo == null) { ErrorInfo = ex; }
172     }
173 william 4 }
174     break;
175     }
176     case (int)VersionCheck.DatabaseIsMoreNew:
177     {
178     bContinue = false;
179     break;
180     }
181     default:
182     {
183     bContinue = false;
184     break;
185     }
186    
187     }
188 william 87 #endregion
189 william 4 sqlCon.Close();
190     sqlCon.Dispose();
191     sqlCmd.Connection.Close();
192     sqlCmd.Connection.Dispose();
193     return bContinue;
194     }
195 william 87
196 william 4 // Run a SQL script (to create or update a database)
197 william 87 [Obsolete("RunScript(string strFile) is being replaced by RunScript(string strFile, MsSqlConnector con, out Exception ErrorInfo)", false)]
198 william 4 public bool RunScript(string strFile)
199     {
200 william 87 return false;
201 william 4 }
202 william 87 public bool RunScript(string strFile, MsSqlConnector con, out Exception ErrorInfo)
203 william 74 {
204 william 87 ErrorInfo = null;
205     string cmd = strFile.Replace("[DataDir]", ProSupport.strDatabasePath);
206     con.RunScript(cmd, out ErrorInfo);
207     return false;
208 william 74 }
209 william 4 // Check the version of the datbase
210     public int CheckVersion(out Version vDb)
211     {
212 william 87 Exception ErrorInfo = null;
213 william 4 //Get Version information from application
214     Version v=new Version(ATSGlobals.strDatabaseVersion);
215     vDb = new Version("0.0.0.0"); // Assign a default value for version
216     try
217     {
218    
219 william 87 //string strResult;
220 william 4
221 william 87 int db_count = -1;
222 william 4 //Verify that the AnywhereTS database exists
223 william 87 #region Get Database Count
224     using (MsSqlConnector conn = new MsSqlConnector(Properties.Settings.Default.DBServer, Properties.Settings.Default.DBInstance, ATSGlobals.strDatabaseName))
225     {
226     try
227     {
228     conn.CreateConnection(out ErrorInfo);
229     conn.OpenConnection(out ErrorInfo);
230 william 21
231 william 87 //Logging.ATSAdminLog.Debug(string.Format("Getting Coount of {0} databases", ATSGlobals.strDatabaseName));
232    
233     SqlCommand cmd = conn.CreateCommandInstance(string.Format("select count(*) from master..sysdatabases where name='{0}'", ATSGlobals.strDatabaseName), new List<SqlParameter>(), out ErrorInfo);
234     db_count = Convert.ToInt32(cmd.ExecuteScalar());
235    
236     Logging.ATSAdminLog.Info(string.Format("Found {0} databases named {1}", db_count, ATSGlobals.strDatabaseName));
237     }
238     catch (Exception ex)
239     {
240     if (ErrorInfo == null)
241     {
242     ErrorInfo = ex;
243     using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
244     {
245     Logging.DatabaseLog.Error(string.Format("Failed to get count of databases named: {0}{1}", System.Environment.NewLine, ATSGlobals.strDatabaseName));
246     }
247     }
248     else
249     {
250     ErrorInfo = ex.GetBaseException();
251     using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ErrorInfo.GetType().Name, ErrorInfo.Message, System.Environment.NewLine, ErrorInfo.ToString())))
252     {
253     Logging.DatabaseLog.Error(string.Format("Failed to get count of databases named: {0}{1}", System.Environment.NewLine, ATSGlobals.strDatabaseName));
254     }
255     }
256     }
257     }
258     #endregion
259     if (db_count == -1)
260 william 4 {
261 william 87 return (int)VersionCheck.Failed;
262 william 21 }
263 william 87 else if (db_count == 0)
264 william 4 {
265 william 88 #region Database Creation support
266     using (MsSqlConnector conn = new MsSqlConnector(Properties.Settings.Default.DBServer, Properties.Settings.Default.DBInstance, ATSGlobals.strDatabaseName))
267     {
268     try
269     {
270     conn.CreateConnection(out ErrorInfo);
271     conn.OpenConnection(out ErrorInfo);
272     }
273     catch (Exception ex)
274     {
275     try
276     {
277     conn.Dispose();
278     using (MsSqlConnector conn1 = new MsSqlConnector(Properties.Settings.Default.DBServer, Properties.Settings.Default.DBInstance, "master"))
279     {
280     try
281     {
282     conn1.CreateConnection(out ErrorInfo);
283     conn1.OpenConnection(out ErrorInfo);
284 william 41
285 william 88 // create datagbase
286     Logging.ATSAdminLog.Info(string.Format("Creating Database {0}", ATSGlobals.strDatabaseName));
287     RunScript(SQLServerResources.CreateDatabase, conn1, out ErrorInfo);
288     Logging.ATSAdminLog.Info(string.Format("Created Database {0}", ATSGlobals.strDatabaseName));
289 william 41
290 william 88 // create tables
291     Logging.ATSAdminLog.Info(string.Format("Creating Tables in {0} Database", ATSGlobals.strDatabaseName));
292     RunScript(SQLServerResources.CreateTables, conn1, out ErrorInfo);
293     Logging.ATSAdminLog.Info(string.Format("Created Tables in {0} Database", ATSGlobals.strDatabaseName));
294     }
295     catch (Exception ex1)
296     {
297     if (ErrorInfo == null) { ErrorInfo = new Exception(ex1.Message, ex); }
298     }
299     }
300     }
301     catch (Exception ex1)
302     {
303     if (ErrorInfo == null) { ErrorInfo = new Exception(ex1.Message, ex); }
304     }
305     }
306     }
307 william 90 if (ErrorInfo != null) { return (int)VersionCheck.Failed; }
308 william 87 #endregion
309 william 41 }
310 william 87
311    
312     #region Get Database Version
313     using (MsSqlConnector conn = new MsSqlConnector(Properties.Settings.Default.DBServer, Properties.Settings.Default.DBInstance, ATSGlobals.strDatabaseName))
314 william 41 {
315     try
316     {
317 william 87 conn.CreateConnection(out ErrorInfo);
318     conn.OpenConnection(out ErrorInfo);
319 william 41
320 william 87 //Logging.ATSAdminLog.Debug(string.Format("Getting Coount of {0} databases", ATSGlobals.strDatabaseName));
321 william 41
322 william 87 SqlCommand cmd = conn.CreateCommandInstance(string.Format("SELECT value from {0}..AppInfo where property='version'", ATSGlobals.strDatabaseName), new List<SqlParameter>(), out ErrorInfo);
323     string version = (string)cmd.ExecuteScalar();
324     vDb = new Version(version);
325     Logging.ATSAdminLog.Info(string.Format("Database {0} is at Version: {1}", ATSGlobals.strDatabaseName, version));
326 william 41 }
327 william 87 catch (Exception ex)
328 william 41 {
329 william 87 if (ErrorInfo == null)
330 william 41 {
331 william 87 ErrorInfo = ex;
332     using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ex.GetType().Name, ex.Message, System.Environment.NewLine, ex.ToString())))
333     {
334     Logging.DatabaseLog.Error(string.Format("Failed to get count of databases named: {0}{1}", System.Environment.NewLine, ATSGlobals.strDatabaseName));
335     }
336 william 41 }
337 william 87 else
338     {
339     ErrorInfo = ex.GetBaseException();
340     using (log4net.NDC.Push(string.Format("{0}: MESSAGE={1}{2}Diagnostics:{2}{3}", ErrorInfo.GetType().Name, ErrorInfo.Message, System.Environment.NewLine, ErrorInfo.ToString())))
341     {
342     Logging.DatabaseLog.Error(string.Format("Failed to get count of databases named: {0}{1}", System.Environment.NewLine, ATSGlobals.strDatabaseName));
343     }
344     }
345 william 22 }
346 william 4 }
347 william 87 #endregion
348    
349     #region old-code might still need
350     //try
351     //{
352     // //using (log4net.NDC.Push(string.Format("SQL Statment={0}", "SELECT value from {0}..AppInfo where property='version'", ATSGlobals.strDatabaseName)))
353     // //{
354     // Logging.ATSAdminLog.Debug(string.Format("Getting {0} Database Version#1", ATSGlobals.strDatabaseName));
355     // sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace(ATSGlobals.strDatabaseName, "master"));
356     // if (sqlCon.State != ConnectionState.Open) sqlCon.Open();
357     // sqlCmd = new SqlCommand(string.Format("SELECT value from {0}..AppInfo where property='version'",ATSGlobals.strDatabaseName), sqlCon);
358     // strResult = (string)sqlCmd.ExecuteScalar();
359     // sqlCon.Close();
360     // //}
361     // Logging.ATSAdminLog.DebugFormat("{0} database version={1}",ATSGlobals.strDatabaseName, strResult);
362     //}
363     //catch(SqlException ex)
364     //{
365     // // the database exists, but one or more tables are missing
366     // using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", ex.Number.ToString(), ex.Message, System.Environment.NewLine, ex.ToString())))
367     // {
368     // Logging.ATSAdminLog.Error("Failed to get database version");
369     // }
370     // try
371     // {
372     // //using (log4net.NDC.Push(string.Format("SQL Statment={0}", SQLServerResources.CreateTables)))
373     // //{
374     // Logging.ATSAdminLog.Debug(string.Format("Creating Tables in {0} Database in CheckVersion()", ATSGlobals.strDatabaseName));
375     // sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace(ATSGlobals.strDatabaseName, "master"));
376     // if (sqlCon.State != ConnectionState.Open) sqlCon.Open();
377     // RunScript(SQLServerResources.CreateTables);
378     // sqlCon.Close();
379     // //}
380     // Logging.ATSAdminLog.Debug(string.Format("Created Tables in {0} Database in CheckVersion()", ATSGlobals.strDatabaseName));
381     // using (log4net.NDC.Push(string.Format("SQL Statment={0}", string.Format("SELECT value from {0}..AppInfo where property='version'", ATSGlobals.strDatabaseName))))
382     // {
383     // Logging.ATSAdminLog.Debug(string.Format("Getting {0} Database Version#2", ATSGlobals.strDatabaseName));
384     // sqlCon = new SqlConnection(Properties.Settings.Default.atsConnectionString.Replace(ATSGlobals.strDatabaseName, "master"));
385     // if (sqlCon.State != ConnectionState.Open) sqlCon.Open();
386     // sqlCmd = new SqlCommand(string.Format("SELECT value from {0}..AppInfo where property='version'", ATSGlobals.strDatabaseName), sqlCon);
387     // strResult = (string)sqlCmd.ExecuteScalar();
388     // sqlCon.Close();
389     // }
390     // Logging.ATSAdminLog.DebugFormat("{0} database version={1}",ATSGlobals.strDatabaseName, strResult);
391     // }
392     // catch(SqlException ex1)
393     // {
394     // using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", ex1.Number.ToString(), ex1.Message, System.Environment.NewLine, ex1.ToString())))
395     // {
396     // Logging.ATSAdminLog.Error("Failed to get database version");
397     // }
398     // return (int)VersionCheck.Failed;
399     // }
400     //}
401     #endregion
402    
403 william 4
404     sqlCon.Close();
405    
406     if (vDb == v)
407     return (int)VersionCheck.Equal;
408    
409     if (vDb > v)
410     return (int)VersionCheck.DatabaseIsMoreNew;
411    
412     else
413     return (int)VersionCheck.DatabaseIsOlder;
414    
415     }
416     catch (SqlException sql_ex)
417     {
418     MessageBox.Show(sql_ex.Number.ToString() + " " + sql_ex.Message.ToString());
419 william 41 using (log4net.NDC.Push(string.Format("SqlException: ID={0} MESSAGE={1}{2}Diagnostics:{2}{3}", sql_ex.Number.ToString(), sql_ex.Message, System.Environment.NewLine, sql_ex.ToString())))
420     {
421     Logging.ATSAdminLog.Error("Failed to check database version");
422     }
423 william 4 return (int)VersionCheck.Failed;
424     }
425     catch (Exception system_ex)
426     {
427     MessageBox.Show(system_ex.Message.ToString());
428 william 41 using (log4net.NDC.Push(string.Format("SqlException: MESSAGE={0}{1}Diagnostics:{1}{2}", system_ex.Message, System.Environment.NewLine, system_ex.ToString())))
429     {
430     Logging.ATSAdminLog.Error("Failed to check database version");
431     }
432 william 4 return (int)VersionCheck.Failed;
433     }
434     }
435    
436     public string[] ParseScriptToCommands(string strScript)
437     {
438     string[] commands;
439     commands = Regex.Split(strScript, "GO\r\n", RegexOptions.IgnoreCase);
440     return commands;
441     }
442    
443 william 21
444     [Obsolete("SetDatabaseRights() has been deperecated - user rights are assigned via SQL Server")]
445 william 4 public static void SetDatabaseRights()
446     {
447     try
448     {
449     // Add an access control entry to the database file.
450     ProSupport.GrantRWaccessForRemoteDesktopUsers(ProSupport.strDatabasePath + @"\" + ProSupport.strDatabaseFilename);
451     ProSupport.GrantRWaccessForRemoteDesktopUsers(ProSupport.strDatabasePath + @"\" + ProSupport.strDatabaseFilename2);
452     }
453     catch (Exception e)
454     {
455     MessageBox.Show("Cannot set access rights for users to the database. Do you have the sufficient rights? Application will abort. Error: " + e.Message);
456 william 46 using (log4net.NDC.Push(string.Format("SqlException: MESSAGE={0}{1}Diagnostics:{1}{2}", e.Message, System.Environment.NewLine, e.ToString())))
457     {
458     Logging.ATSAdminLog.Fatal("Cannot set access rights for users to the database.");
459     }
460 william 4 Application.Exit();
461     return;
462     }
463     }
464    
465     public static void StartSQLbrowserService()
466     {
467     System.ServiceProcess.ServiceController srvController = new System.ServiceProcess.ServiceController(SQL_BROWSER_SERVICE_NAME);
468     try
469     {
470     // Check that the SQL browser service is not already running
471     if (srvController.Status != System.ServiceProcess.ServiceControllerStatus.Running)
472     { // Service not running, start it.
473     srvController.Start();
474     srvController.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running, TimeSpan.FromSeconds(50));
475     }
476     }
477    
478     catch (Exception e)
479     {
480     MessageBox.Show("Could not start the SQL Browser service (13078). Error:" + e.Message);
481 william 46 using (log4net.NDC.Push(string.Format("SqlException: MESSAGE={0}{1}Diagnostics:{1}{2}", e.Message, System.Environment.NewLine, e.ToString())))
482     {
483     Logging.ATSAdminLog.Error("Could not start the SQL Browser service (13078).");
484     }
485 william 4 }
486     }
487    
488     // Configure the SQL browser service to autostart
489     public static void AutostartSQLbrowserService()
490     {
491     try
492     {
493     //construct the management path
494     string path = "Win32_Service.Name='" + SQL_BROWSER_SERVICE_NAME + "'";
495     using (ManagementObject service = new ManagementObject(new ManagementPath(path)))
496     {
497     object[] parameters = new object[1];
498     parameters[0] = "Automatic";
499     service.InvokeMethod("ChangeStartMode", parameters);
500    
501     }
502     }
503 william 46 catch(Exception e)
504 william 4 {
505 william 17 MessageBox.Show("Error, could not configure SQL Browser service (24888). Please check that SQL Server is intalled and that you are logged in with sufficient rights to configure services. Then retry the operation.");
506 william 46 using (log4net.NDC.Push(string.Format("SqlException: MESSAGE={0}{1}Diagnostics:{1}{2}", e.Message, System.Environment.NewLine, e.ToString())))
507     {
508     Logging.ATSAdminLog.Fatal("Could not configure SQL Browser service (24888). Please check that SQL Server is intalled and that you are logged in with sufficient rights to configure services. Then retry the operation.");
509     }
510 william 4 }
511     }
512    
513     // Enable named pipes on the SQL Express server
514     public static bool EnableNamedPipes()
515     {
516     ManagementScope manScope = new ManagementScope(@"\\.\root\Microsoft\SqlServer\ComputerManagement");
517     ManagementClass sqlServicesMan = new ManagementClass(manScope, new ManagementPath("SqlService"), null);
518     ManagementClass serverProtocolsMan = new ManagementClass(manScope, new ManagementPath("ServerNetworkProtocol"), null);
519     bool restarted = false; // Indicating if restart of SQL server was performed
520    
521     sqlServicesMan.Get();
522     serverProtocolsMan.Get();
523    
524     foreach (ManagementObject prot in serverProtocolsMan.GetInstances())
525     {
526     prot.Get();
527     if ((string)prot.GetPropertyValue("ProtocolName") == "Np" && //Named pipes
528 william 17 (string)prot.GetPropertyValue("InstanceName") == InstanceName)
529 william 4 { // We found the named pipes protocol
530     if (!(bool)prot.GetPropertyValue("Enabled"))
531     { // Named pipes not activated
532     prot.InvokeMethod("SetEnable", null); // Activate named pipes
533    
534     // Check if user wants to restart SQL server
535     DialogResult resultRights;
536 william 17 resultRights = MessageBox.Show(string.Format("In order for users to use the AnywhereTS control panel, the {0} service on this computer need to be restarted. This operation might take up to 60 seconds. Do you want restart the {0} service now?", InstanceName), string.Format("AnywhereTS - Restart {0} (This operation might take up to 60 seconds!)", InstanceName), MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
537 william 4 if (resultRights == DialogResult.Yes)
538     {
539     // Restart the SQL server
540     const uint sqlServerService = 1;
541     const uint sqlServiceStopped = 1;
542     foreach (ManagementObject svc in sqlServicesMan.GetInstances())
543     {
544     if ((uint)svc.GetPropertyValue("SqlServiceType") == sqlServerService &&
545 william 17 (string)svc.GetPropertyValue("ServiceName") == string.Format("MSSQL${0}", InstanceName))
546 william 4 {
547     svc.Get();
548     if ((uint)svc.GetPropertyValue("State") != sqlServiceStopped)
549     {
550     svc.InvokeMethod("StopService", null);
551     }
552     svc.InvokeMethod("StartService", null);
553     restarted = true;
554     } // end if
555     }
556     }
557     } // end if 'named pipes protool'
558     }
559     } // foreach
560    
561     return restarted;
562     }
563     }
564     }

  ViewVC Help
Powered by ViewVC 1.1.22