Fork me on GitHub

开机自启动

/// <summary>
    /// 开机启动
    /// </summary>
    public class AutoRunBusiness
    {
        #region 字段
        private readonly string _registryKeyName = @"Software\Microsoft\Windows\CurrentVersion\Run";
        private readonly string executablePath = System.Windows.Forms.Application.ExecutablePath;
        private readonly string _sucessMessage = "开机启动设置成功";
        private readonly string _sucessFail = "开机启动设置失败";
        #endregion
        #region 对外方法
        /// <summary>
        /// 设置自启动
        /// </summary>
        /// <param name="autoRun">true表示要自启动,false表示停止自启动</param>
        public void SetAutoRun(bool autoRun)
        {
            string exeName = Path.GetFileNameWithoutExtension(executablePath);
            using (RegistryKey currentUser = Registry.CurrentUser)
            {
                try
                {
                    bool setResult = SetAutoRun(currentUser, autoRun, exeName, executablePath);
                    if (!setResult)
                    {
                       
                        return;
                    }
                 
                }
                catch (Exception ex)
                {
                  
                }
            }
        }
        #endregion

        #region 内部逻辑
        private bool SetAutoRun(RegistryKey rootKey, bool autoRun, string exeName, string executablePath)
        {
            using (RegistryKey autoRunKey = rootKey.OpenSubKey(_registryKeyName, true))
            {
                if (autoRunKey != null)
                {
                    return SetRun(autoRun, exeName, executablePath, autoRunKey);
                }
                return CreateAndSetRun(rootKey, autoRun, exeName, executablePath);
            }
        }
        private bool CreateAndSetRun(RegistryKey rootKey, bool autoRun, string exeName, string executablePath)
        {
            try
            {
                using (var newAutoRunKey = rootKey.CreateSubKey(_registryKeyName, RegistryKeyPermissionCheck.ReadWriteSubTree))
                {
                    return SetRun(autoRun, exeName, executablePath, newAutoRunKey);
                }
            }
            catch (Exception ex)
            {
               
                return false;
            }
        }
        private bool SetRun(bool autoRun, string exeName, string executablePath, RegistryKey autoRunKey)
        {
            try
            {
                if (autoRunKey == null) return false;

                if (autoRun) //设置开机自启动  
                {
                    autoRunKey.SetValue(exeName, $"\"{executablePath}\" ");
                    return true;
                }
                CancelRun(exeName, autoRunKey);
            }
            catch (Exception ex)
            {
              
                return false;
            }
            return true;
        }

        private static void CancelRun(string exeName, RegistryKey autoRunKey)
        {
            //取消开机自启动  
            autoRunKey.DeleteValue(exeName, false);
        }
        #endregion
    }

 

posted @ 2022-09-08 22:07  黄高林  阅读(139)  评论(0编辑  收藏  举报