WPF 将程序设为开启自启 (注册表实现)

1 写入或删除注册表键值对,即设为开机启动或开机不启动2 判断注册键值对是否存在,即是否处于开机启动状态3 将应用程序设为或不设为开机启动

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;
} 
(152)
打赏 支付红包 支付红包 微信打赏 微信打赏
上一篇 2023-05-23 15:53:33
下一篇 2024-01-08 15:44:21

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信