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

Annotation of /trunk/TSAdminTool/Database.cs

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.22