功能:窗体程序(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才有这个路径。
到处问题就解决了!楼主菜鸟一枚,有说错的地方请谅解!