C#窗体程序开机启动的问题

功能:窗体程序(exe)开机启动

实现:

public void SetAutoRun(string fileName, bool isAutoRun)
{
    RegistryKey reg = null;
    try
    {
        if (!System.IO.File.Exists(fileName))
            throw new Exception("该文件不存在!");
        String name = fileName.Substring(fileName.LastIndexOf(@"\") + 1);
        reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
        if (reg == null)
            reg = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
        if (isAutoRun)
            reg.SetValue(name, fileName);
        else
            reg.DeleteValue(name, false);
    }
    catch(Exception ex)
    {
        throw new Exception(ex.ToString());  
    }
    finally
    {
        if (reg != null)
            reg.Close();
    }
}


private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    if(checkBox1.Checked)
    {
        SetAutoRun(@"D:\WindowsForms.exe", true);  //设置自动启动当前程序
    }
    else
    {
        SetAutoRun(@"D:\WindowsForms.exe", false);  //取消自动启动
    }
}

问题出现:开机并未启动!!!!!!!!!

后面打开注册表发现并没有写入到自己想要的注册表位置上


搜索了一下(我的程序名称为: WindowsForms.exe)发现在其他地方出现了


很奇怪,中间多了一个路径(Wow6432Node)。原来Wow6432Node是64位的操作系统用来放置安装32位软件的注册表信息,然后这里就又有个疑问,VS2013难道还分64位或者32位?百度了下,vs开发环境原来是没有64或者32之分的,但是编译器确实是有32和64位之分的。

最终解决方案:项目=>右键属性=>生成 ,去掉首选32位打勾

C#窗体程序开机启动的问题_第1张图片

C#窗体程序开机启动的问题_第2张图片

据说这个注册表问题时跟操作系统有关系,楼主没有亲身试过,XP系统之前的系统是没有这目录的注册表的,WIN7和WIN8才有这个路径。

到处问题就解决了!楼主菜鸟一枚,有说错的地方请谅解!


你可能感兴趣的:(C#窗体程序开机启动的问题)