public static bool GetBool(string p_Name, bool p_DefaultValue)
        {
            string      methSig     = $"GetBool({p_Name},{p_DefaultValue})";
            RegistryKey currentUser = Registry.CurrentUser;

            TraceLogger.Debug($"{methSig}: RegistryKey[CurrentUser]='{currentUser?.Name??"NULL"}'");
            currentUser.CreateSubKey("Software\\ASCOM\\Utilities");
            RegistryKey registryKey = currentUser.OpenSubKey("Software\\ASCOM\\Utilities", true);

            TraceLogger.Debug($"{methSig}: RegistryKey[Utilities]='{registryKey?.Name ?? "NULL"}'");
            bool flag = false;

            try
            {
                if (registryKey.GetValueKind(p_Name) == RegistryValueKind.String)
                {
                    string keyValue = registryKey.GetValue(p_Name).ToString();
                    TraceLogger.Debug($"{methSig}: RegistryKey[Utilities.{p_Name}]='{keyValue ?? "NULL"}'");
                    flag = Conversions.ToBoolean(keyValue);
                }
            }
            catch (IOException ex1)
            {
                TraceLogger.Debug($"Exception1: Get RegistryValue: {ex1.GetType().Name}");
                TraceLogger.Debug(ex1.ToString());
                //ProjectData.SetProjectError((Exception) ex1);
                try
                {
                    RegistryCommonCode.SetName(p_Name, p_DefaultValue.ToString());
                    flag = p_DefaultValue;
                }
                catch (Exception ex2)
                {
                    TraceLogger.Debug($"Exception2: SetName: {ex2.GetType().Name}");
                    TraceLogger.Debug(ex2.ToString());
                    //ProjectData.SetProjectError(ex2);
                    flag = p_DefaultValue;
                    //ProjectData.ClearProjectError();
                }
                //ProjectData.ClearProjectError();
            }
            catch (Exception ex)
            {
                TraceLogger.Debug($"Exception: Get RegistryValue: {ex.GetType().Name}");
                TraceLogger.Debug(ex.ToString());
                //ProjectData.SetProjectError(ex);
                flag = p_DefaultValue;
                //ProjectData.ClearProjectError();
            }
            registryKey.Flush();
            registryKey.Close();
            currentUser.Flush();
            currentUser.Close();
            return(flag);
        }
        public static Serial.WaitType GetWaitType(string p_Name, Serial.WaitType p_DefaultValue)
        {
            RegistryKey currentUser = Registry.CurrentUser;

            currentUser.CreateSubKey("Software\\ASCOM\\Utilities");
            RegistryKey registryKey = currentUser.OpenSubKey("Software\\ASCOM\\Utilities", true);

            Serial.WaitType waitType = Serial.WaitType.Sleep;
            try
            {
                if (registryKey.GetValueKind(p_Name) == RegistryValueKind.String)
                {
                    waitType = (Serial.WaitType)Conversions.ToInteger(Enum.Parse(typeof(Serial.WaitType), registryKey.GetValue(p_Name).ToString()));
                }
            }
            catch (IOException ex1)
            {
                //ProjectData.SetProjectError((Exception) ex1);
                try
                {
                    RegistryCommonCode.SetName(p_Name, p_DefaultValue.ToString());
                    waitType = p_DefaultValue;
                }
                catch (Exception ex2)
                {
                    //ProjectData.SetProjectError(ex2);
                    waitType = p_DefaultValue;
                    //ProjectData.ClearProjectError();
                }
                //ProjectData.ClearProjectError();
            }
            catch (Exception ex)
            {
                //ProjectData.SetProjectError(ex);
                waitType = p_DefaultValue;
                //ProjectData.ClearProjectError();
            }
            registryKey.Flush();
            registryKey.Close();
            currentUser.Flush();
            currentUser.Close();
            return(waitType);
        }
        public static DateTime GetDate(string p_Name, DateTime p_DefaultValue)
        {
            RegistryKey currentUser = Registry.CurrentUser;

            currentUser.CreateSubKey("Software\\ASCOM\\Utilities");
            RegistryKey registryKey = currentUser.OpenSubKey("Software\\ASCOM\\Utilities", true);
            DateTime    dateTime    = default(DateTime);

            try
            {
                if (registryKey.GetValueKind(p_Name) == RegistryValueKind.String)
                {
                    dateTime = Conversions.ToDate(registryKey.GetValue(p_Name));
                }
            }
            catch (IOException ex1)
            {
                //ProjectData.SetProjectError((Exception) ex1);
                try
                {
                    RegistryCommonCode.SetName(p_Name, p_DefaultValue.ToString());
                    dateTime = p_DefaultValue;
                }
                catch (Exception ex2)
                {
                    //ProjectData.SetProjectError(ex2);
                    dateTime = p_DefaultValue;
                    //ProjectData.ClearProjectError();
                }
                //ProjectData.ClearProjectError();
            }
            catch (Exception ex)
            {
                //ProjectData.SetProjectError(ex);
                dateTime = p_DefaultValue;
                //ProjectData.ClearProjectError();
            }
            registryKey.Flush();
            registryKey.Close();
            currentUser.Flush();
            currentUser.Close();
            return(dateTime);
        }
        public static string GetString(string p_Name, string p_DefaultValue)
        {
            string      str         = "";
            RegistryKey currentUser = Registry.CurrentUser;

            currentUser.CreateSubKey("Software\\ASCOM\\Utilities");
            RegistryKey registryKey = currentUser.OpenSubKey("Software\\ASCOM\\Utilities", true);

            try
            {
                if (registryKey.GetValueKind(p_Name) == RegistryValueKind.String)
                {
                    str = registryKey.GetValue(p_Name).ToString();
                }
            }
            catch (IOException ex1)
            {
                //ProjectData.SetProjectError((Exception) ex1);
                try
                {
                    RegistryCommonCode.SetName(p_Name, p_DefaultValue.ToString());
                    str = p_DefaultValue;
                }
                catch (Exception ex2)
                {
                    //ProjectData.SetProjectError(ex2);
                    str = p_DefaultValue;
                    //ProjectData.ClearProjectError();
                }
                //ProjectData.ClearProjectError();
            }
            catch (Exception ex)
            {
                //ProjectData.SetProjectError(ex);
                str = p_DefaultValue;
                //ProjectData.ClearProjectError();
            }
            registryKey.Flush();
            registryKey.Close();
            currentUser.Flush();
            currentUser.Close();
            return(str);
        }