1.写入或删除注册表键值对,即设为开机启动或开机不启动
2.判断注册键值对是否存在,即是否处于开机启动状态
3.将应用程序设为或不设为开机启动
/// <summary> /// 将本程序设为开启自启 /// </summary> /// <param name="OnOff">自启开关</param> /// <returns></returns> public static Boolean SetMeStart(Boolean OnOff) { String AppName = Process.GetCurrentProcess().MainModule.ModuleName; String AppPath = Process.GetCurrentProcess().MainModule.FileName; return SetAutoStart(OnOff, AppName, AppPath); } /// <summary> /// 将应用程序设为或不设为开机启动 /// </summary> /// <param name="OnOff">自启开关</param> /// <param name="AppName">应用程序名</param> /// <param name="AppPath">应用程序完全路径</param> public static Boolean SetAutoStart(Boolean OnOff, String AppName, String AppPath) { Boolean isOk = true; //如果从没有设为开机启动设置到要设为开机启动 if (!IsExistKey(AppName) && OnOff) { isOk = SelfRunning(OnOff, AppName, @AppPath); } //如果从设为开机启动设置到不要设为开机启动 else if (IsExistKey(AppName) && !OnOff) { isOk = SelfRunning(OnOff, AppName, @AppPath); } return isOk; } /// <summary> /// 判断注册键值对是否存在,即是否处于开机启动状态 /// </summary> /// <param name="KeyName">键值名</param> /// <returns></returns> private static Boolean IsExistKey(String KeyName) { try { Boolean _exist = false; RegistryKey local = Registry.LocalMachine; RegistryKey runs = local.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true); if (runs == null) { RegistryKey key2 = local.CreateSubKey("SOFTWARE"); RegistryKey key3 = key2.CreateSubKey("Microsoft"); RegistryKey key4 = key3.CreateSubKey("Windows"); RegistryKey key5 = key4.CreateSubKey("CurrentVersion"); RegistryKey key6 = key5.CreateSubKey("Run"); runs = key6; } String[] runsName = runs.GetValueNames(); foreach (String strName in runsName) { if (strName.ToUpper() == KeyName.ToUpper()) { _exist = true; return _exist; } } return _exist; } catch { return false; } } /// <summary> /// 写入或删除注册表键值对,即设为开机启动或开机不启动 /// </summary> /// <param name="isStart">是否开机启动</param> /// <param name="exeName">应用程序名</param> /// <param name="path">应用程序路径带程序名</param> /// <returns></returns> private static Boolean SelfRunning(Boolean isStart, String exeName, String path) { try { RegistryKey local = Registry.LocalMachine; RegistryKey key = local.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true); if (key == null) { local.CreateSubKey("SOFTWARE//Microsoft//Windows//CurrentVersion//Run"); } if (isStart) { key.SetValue(exeName, path); key.Close(); } else { String[] keyNames = key.GetValueNames(); foreach (String keyName in keyNames) { if (keyName.ToUpper() == exeName.ToUpper()) { key.DeleteValue(exeName); key.Close(); } } } } catch (Exception ex) { SysLog.Error(ex); return false; } return true; }