private static void TryKey(RegistryKey k1, LocalInstanceInfo ret, string instanceName)
        {
            string rawVersion = null;

            using (RegistryKey rk = k1.OpenSubKey(@"MSSQLServer\CurrentVersion", false))
                if (rk != null)
                {
                    rawVersion = rk.GetValue("CurrentVersion") as string;
                }

/*
 *          string rawPath = null;
 *          using (RegistryKey rk = k1.OpenSubKey(@"Setup", false))
 *              if (rk != null)
 *                  rawPath = rk.GetValue("SQLPath") as string;
 */


            if (!string.IsNullOrEmpty(rawVersion) /* && rawPath != null && Directory.Exists(rawPath) */)
            {
                try
                {
                    Version ver = new Version(rawVersion);
                    var     i   = new LocalInstanceInfo.SqlInstance(instanceName);
                    i.FileVer = ver;
                    ret.Instances.Add(i);
                }
                catch
                {
                }
            }
        }
        static void BuildDescription(LocalInstanceInfo info, TimeSpan timeout)
        {
            if (info.Instances.Count > 0)
            {
                List <ManualResetEvent> events = new List <ManualResetEvent>();
                foreach (LocalInstanceInfo.SqlInstance instance in info.Instances)
                {
                    // description
                    LocalInstanceInfo.SqlInstance sqlInstance = instance;
                    ManualResetEvent ev = new ManualResetEvent(false);
                    events.Add(ev);
                    ThreadPool.QueueUserWorkItem(
                        delegate
                    {
                        try
                        {
                            // Console.WriteLine(i2.FullLocalName + ": " + Thread.CurrentThread.ManagedThreadId);
                            // Thread.Sleep(3000);
                            string fullPath;
                            Version productVersion;
                            ServiceControllerStatus status;
                            if (TryService(LocalInstanceInfo.GetServiceKey(sqlInstance.Name), out fullPath, out productVersion, out status))
                            {
                                sqlInstance.Status = status;
                                sqlInstance.Ver    = productVersion;

                                if (sqlInstance.Status == ServiceControllerStatus.Running)
                                {
                                    string cs = "Data Source=" + sqlInstance.FullLocalName + ";Integrated Security=SSPI;Pooling=False;";
                                    using (SqlConnection con = new SqlConnection(cs))
                                        using (SqlCommand cmd = new SqlCommand("Select @@version, SERVERPROPERTY('ProductLevel'), SERVERPROPERTY('Edition')", con))
                                        {
                                            cmd.CommandTimeout = (int)timeout.TotalSeconds;
                                            con.Open();
                                            using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SingleRow))
                                            {
                                                if (rdr.Read())
                                                {
                                                    string description = (string)rdr.GetString(0);
                                                    string level       = (string)rdr.GetString(1);
                                                    string edition     = (string)rdr.GetString(2);

                                                    description =
                                                        description.Replace("\t", " ").Replace("\r", " ").Replace("\n", " ");

                                                    while (description.IndexOf("  ") >= 0)
                                                    {
                                                        description = description.Replace("  ", " ");
                                                    }

                                                    sqlInstance.IsOK        = true;
                                                    sqlInstance.Description = description;
                                                    sqlInstance.Level       = level;
                                                    bool isExpress          =
                                                        edition.IndexOf("Desktop Engine") >= 0 ||
                                                        edition.IndexOf("Express Edition") >= 0;

                                                    sqlInstance.Edition = isExpress ? SqlEdition.Express : SqlEdition.LeastStandard;
                                                }
                                            }
                                        }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Debug.WriteLine(
                                "Failed to connect to " + sqlInstance.FullLocalName + ". See Details Below" + Environment.NewLine +
                                ex + Environment.NewLine);
                        }
                        finally
                        {
                            ev.Set();
                        }
                    });
                } // done: description


                WaitHandle.WaitAll(events.ToArray());

                List <LocalInstanceInfo.SqlInstance> normal = info.Instances.FindAll(delegate(LocalInstanceInfo.SqlInstance i) { return(i.Ver != null); });
                info.Instances.Clear();
                info.Instances.AddRange(normal);
            }
        }