常见的windows开机自启动方法

经常有些新手问有哪些方法可以设置开机自启动。特此做个常用自启动的方法的汇总。

开始菜单启动项

最简单的方法莫过于把程序丢到【开始菜单-所有程序-启动】里了。地球人都知道……不过这个文件夹的本地路径在哪儿捏?

其实这个文件夹就位于“C:Documents and SettingsAll Users「开始」菜单程序启动”(路径中的"C:"为你实际安装系统的盘符)里面。只要将程序复制进去。开机就可以实现启动了……

注册表

正如地球人民所熟知的那样,把程序放在开始菜单是很简单的方法……不过,偶尔也有想让程序隐蔽的自启动的人。这时候作为第二首选,注册表是不二选择。不为多数人知晓的是,注册表可以用来启动程序键并不仅仅只有“RUN”而已。

下面写出注册表的开机自启动键:
以下键值的路径所指向的程序都可以开机自启动。

1. HKEY_LOCAL_MACHINEsoftwaremicrosoftwindowscurrent version下的RunServices、RunServicesOnce、Run、RunOnce、RunEx、 RunOnceEx
2. HKEY_CURRENT_USERsoftwaremicrosoftwindowscurrent version下的RunServices、RunServicesOnce、Run、RunOnce、RunEx、 RunOnceEx
3. HKEY_LOCAL_MACHINEsoftwaremicrosoftwindowscurrent versionPoliciesExplorerRun
4. HKEY_CURRENT_USERsoftwaremicrosoftwindowscurrent versionPoliciesExplorerRun
5. HKEY_LOCAL_MACHINESystemcurrentControlsetServices
6. HKEY_LOCAL_MACHINESystemcurrentControlsetOntrolSession Manager
7. HKEY_LOCAL_MACHINEsoftwaremicrosoftwindows NTcurrent versionWinlogonUserinit

以下的键值里如果有可执行程序,也能开机自启动:

1. HKEY_CLASSES_ROOTexefileshellopenconmand
2. HKEY_CLASSES_ROOTcomfileshellopenconmand
3. HKEY_CLASSES_ROOTbatfileshellopenconmand
4. HKEY_CLASSES_ROOThtafileshellopenconmand
5. HKEY_CLASSES_ROOTpiffileshellopenconmand
6. HKEY_LOCALMACHINEsoftwareclassesexefileshellopencommand
7. HKEY_LOCALMACHINEsoftwareclassescomfileshellopencommand
8. HKEY_LOCALMACHINEsoftwareclassesbatfileshellopencommand
9. HKEY_LOCALMACHINEsoftwareclasseshtafileshellopencommand
10. HKEY_LOCALMACHINEsoftwareclassespiffileshellopencommand
注意:这些键下面的值都是""%1"%*",如果这些值里面包含了可执行文件的话,那么这个可执行文件也回开机启动的,例:如果将值""%1"%*"改为"s1.exe%1%*"的话,那么s1.exe就会在系统每次启动的时候执行。(可执行文件的类型有:bat、exe、pif、com、hta)

添加服务

除了注册表,一个方法也被大量的采用,那就是添加服务。众所周知,服务是开机启动的啦,那自然也可以启动程序拉

添加程序作为一个服务,一般有两种途径。其中常用的是调用命令行“sc create”命令。


调用格式为 sc create 服务名称 bin

path= 程序路径 type= own start= auto


其中

type是关于建立服务的类型,选项值包括驱
动程序使用的类型。

值可以是以下值:

own, share, interact, kernel, filesys
默认是share。


start是关于启动服务的类型,选项值包括驱动程序使用的类型。

值可以是以下的值:

boot, system, auto, demand, disabled
默认是demand(手动)。


注意:sc create 命令创建完的服务默认是不启动的。如果要马上启动,可以在后面再使用

net start 服务名

来马上启动服务。

另外,需要注意的是,服务的程序入口点和一般程序不同,名为service main。同时作为服务的程序,本身的函数名字和格式,必须符合标准,并且用SetServiceStatus设置服务状态。否则启动服务的时候会提示未响应导致启动失败。


例子

假设在C盘有个文件“客户端”,想把他设置成一个叫“服务”的服务。那么可以在命令行里这么写:

sc create 服务 binpath= c:客户端.exe type= own start= auto

net start 服务



如果想要把一个普通的标准程序注册为服务,也可以输入:


sc create 服务名称 type= own type= interact start=启动类型 DisplayName=显示名称 binPath=cmd.exe /c start 要启动的程序的路径


以上这行命令的作用是使用CMD.exe这个命令行编辑器来代为启动你要启动的程序,这样即便是普通的程序也可以用服务启动(用户名也是SYSTEM)。这么做的一个不好的地方就是当你的计算机启动的时候,往往会蹦跶出硕大的一个框“XXX启动失败”之类的。但是虽然显示失败了,程序却是正确的启动了。


除了调用命令行,直接在注册表上下手,达到添加服务的目的也是可行的。

系统服务跟以下的注册表几个项目相关:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices

HKEY_LOCAL_MACHINESYSTEMControlSet001Services

HKEY_LOCAL_MACHINESYSTEMControlSet002Services

懒得打字了,以下是引用网上的资料

在以上任何注册表列中添加一个新项:

名字是你想要添加系统服务的名字,比如Backdoor。

在BACKDOOR项下新建一个字符串,数值名称Displayname 数值数据为要添加服务的

名称Backdoor。
下面列出一个表,会直观一些:

名称类型数据 备注

Displayname REG_SZ 想要添加服务的名称 想要添加服务的名称
Description REG_SZ 服务的描述 服务的描述
ImagePath REG EXPAND SZ 程序的路径
Start REG_DWORD 0,2,3,4 2代表自动启动,3代表手动启动服务.4代表禁用服务,0代表系统对底层设备驱动(一般不需要这个)
ErrorControl REG_DWORD 1
Type REG_DWORD 10 or 20 一般应用程序都是10,其他的对应20
ObjectName REG_SZ LocalSystem 显示本地登陆

注意:在XP/2003下可

以完全手工来添加REG EXPAND SZ类型。在XP/2003下直接修改ImagePath 键值就可以了。但是在WIN2000下却不可以。原因我也不清楚:(。
但是在WIN2000下我们写一个REG来直接注册系统服务,这样WIN2000下添加系统也能很轻松了。这里同样需要注意的是注册表文件里的ImagePath的数值类型必须是HEX(16进制)。可以拿WINHEX来把程序的绝对路径转换成16进制的。每一个数值用逗号搁开。比如我的ImagePath键值是C:winntnukegroup.exe那就应该转换成:
63,3A,5C,77,69,6E,6E,74,5C,6E,75,6B,65,2E,65,78,65(无空格)

打开记事本,敲入以下内容:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSRVTEST]

"Type"=dword:00000010

"Start"=dword:00000002

"ErrorControl"=dword:00000001

"ImagePath"=hex(2):63,3A,5C,77,69,6E,6E,74,5C,6E,75,6B,65,2E,65,78,65

"DisplayName"="SRVTEST"

"ObjectName"="LocalSystem"

"Description"="系统服务测试"

把以上信息保存为addsrv.reg,我们就可以依靠命令来导入注册表,从而达到添加系统服务的目的。

我们在命令控制台输入regedit /s addsrv.reg,等机器重新启动,这个服务就被成功添加了。

但是我在真正实验的时候就遇到困难了。ImagePath的数值是乱码

怎么想也不明白。但是这时可以把乱码修改成绝对路径了。如果直接把REG信息写成这样
"ImagePath"=hex(2):C:WINNTNUKEGROUP.EXE

其他的键值都可以添加,这个键值就不可以了?总之我们可以先添加乱码的ImagePath,然后再修改成C:winntnukegroup.exe 这样也不是不可能的。就是在命令行下来添加就很麻烦了。

以上是Windows 2000手工添加系统服务的方法,对于Windows 98 注册表结构是不一样的,但是Windows 98仍然可以通过注册表来实现添加系统服务,而且还要更简单一些。

在项目“HKLM/SOFTWARE/Microsoft/WindowsCurrentVersion/RunServices”下添加一个新字符串数值。

比如,如果程序的名字叫做“BACKDOOR”,就建立一个名为“BACKDOOR”的字符串数值,然后在数据域中输入执行程序的完整路径。

AUTOEXEC

这是一个很久很久以前的故事……

AUTOEXEC是DOS时代的开机启动脚本。在WINDOWS 98/me 下也被广泛使用。

AUTOEXEC现在几乎都被遗忘了。不过在某些特殊场合还是有着特殊的意义的。比如,很多工具显示开机启动项都是靠注册表键值来显示的。这时候假如用的是AUTOEXEC脚本就不会被这类工具显示了。

那么,怎么才能使用这个启动脚本来达到我们启动程序的目的呢?

首先:

由于AUTOEXEC

启动脚本在XP下默认是关闭的,所以在启用前需要先写入注册表

HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWinlogon。 新建一个字符串值“ParseAutoexec”,将值设置为“1”。

然后 :

在你的系统盘的根目录新建一个文本文档,改名为 AUTOEXEC.BAT


里面输入start 程序路径



相关文档
最新文档