您的位置:首页 > 编程语言 > C#

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

2016-12-07 17:28 393 查看
功能:窗体程序(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位打勾





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

到处问题就解决了!楼主菜鸟一枚,有说错的地方请谅解!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息