Windows注册表和软件开机启动
 
    在Windows系统下,有很多软件通常都有这样一个设置:【开机启动】。这个设置意味着在Windows系统启动时也启动软件的可执行程序。那么软件是如何做到在系统启动时自动加载的呢?这个秘密就在Windows的注册表里面。
    所谓的注册表,其实就是Windows自身的一个数据库,它是树结构的。有关注册表和开机启动的细节不在本文的讨论范围之内,这里我们就选取与本文主题相关的几项。
 
        1.打开注册表的命令:regedit
        2.命令行模式下的注册表命令:reg
        3.查看和更改开机启动的命令:msconfig
        4.开始-运行对话框的快捷键:win+R
 
    首先,我们可以通过WIN+R打开windows的运行窗口。然后输入:msconfig 回车或按“确定”;
在随之打开的窗口中打了勾的就是开机启动的项目/程序了;
    那么这个跟我们的注册表又有什么关系呢。仔细观察可以发现大部分启动项的【位置】一栏是一样的;即:
        ”HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”.
        这个是什么玩意儿?
    它就是一个注册表的路径;也就是开机启动命名存放的位置;接着问题又来了?这个路径怎么没有C:或者D:这样的盘符,找不着它?
        下面就来介绍一下找到它的方法(通常是有效的):
 
         1.WIN+R打开运行窗口;
         2.输入regedit 回车;
 
         我们大概能够看到这样一段字符串:
         ”HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”
         没有HKLM啊?好吧,其实它就是”HKEY_LOCAL_MACHINE”的一个马甲而已;
         展开”HKEY_LOCAL_MACHINE”左边的那个小加号
         我们就会发现SOFTWARE;
         很好,继续展开SOFTWARE的小加号;
         接着继续展开小加号…
         最终我们终于找到了几个奇怪的东西;
 
    在【数据】那一栏,终于发现了程序开机启动秘密了。原来这个数据就是软件的可执行文件的Windows下的磁盘路径;那么那个【类型】和【名称】又是怎么一回事呢?
    REG_SZ这个代表注册表的一种类型;实际上就是字符串,比如说:abc123,hello,所有我们输入在文本里面的内容都可以理解为字符串的集合。
    【名称】这个就很好理解了,就是个名字,比如说:张三,李四
既然这个地方存在的项目都可以开机启动,我们反过来想一下,如果把它删掉,那不就是取消开机启动了吗?实际上不用这么复杂,取消开机启动只需要在msconfig的时候将那个勾去掉就可以了。那么我们怎么添加其他的程序到开机启动呢?
答案很简单,就是在这个[Run]下面新建一个字符串(REG_SZ)的注册表值,然后给它取个名字,然后双击它添加一个程序的路径就可以了;
         显然,这样一条一条的加比较繁琐,而且每次都要去点小加号….
 
         下面提供一种简便办法;
         使用REG.exe
         这个是命令行模式下的注册表管理工具;也就是regedit.exe的命令行版;
         同样需要使用WIN+R
         输入CMD
         输入reg/?
         会出现使用帮助....
 
     如果我们想将C:\abc.exe加到开机启动项,那么大概只需要在这里输入类似如下:
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v abc /T REG_SZ /D "C:\abc.exe"
是不是很简单?
    回过头来发现我们其实已经完成了一项了不起的任务:控制应用程序是否开机启动。
 
         对于那些对此有更多兴趣的读者,提供一点小参考:
         1.百度百科的注册表介绍:
         2.reg命令的参考