/// <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
}