未标明原创的文章皆为转载~

操作系统(XP,2003)登录前自动运行程序的方法

我有一个EXE程序,可以作为托盘程序运行。我写了注册表:  
  \SoftWare\Microsoft\windows\CurrentVersion\Run,现在能够在用户登录操作系统后自动运行。  
  我想让它在登录之前就能自动运行,希望通过注册表达到这个目的,请问哪位知道方法?  
   
  查到下面的方法,觉得不太方便  
  引用自     jimmyge       (Do   Re   Mi)    
  想让一个程序在启动系统的时候自动运行,你有什么好办法?添加到启动组?那如果别人删除掉就不管用了。如果你使用了Windows       NT/2000/XP,就可以试试把这个程序添加为一个服务,这样只有拥有权限的人才可以更改服务,只要你设置好权限,就不用担心会被别人删除了。  
   
  要把应用程序添加为服务,你需要两个小软件:Instsrv.exe和Srvany.exe。Instsrv.exe可以给系统安装和删除服务,Srvany.exe可以让程序以服务的方式运行。这两个软件都包含在Windows       NT       Resource       Kit里,如果你没有,也可以点击这里下载。  
   
  把这两个程序保存在一个方便的位置,例如C盘根目录下。我们举例来说明,把OE作为一个服务添加进Windows       XP       Professional操作系统中,并把这个服务命名为“Mail”。在运行中输入“CMD”,回车,打开命令行窗口,在提示符后面直接输入:“c:\instsrv.exe       Mail       c:\srvany.exe”然后回车,其中的“c:\instsrv.exe”和“c:\srvany.exe”表示这两个程序保存的位置,而Mail则是你想添加的服务名称。  
   
  运行Regedit打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下,找到刚才添加的Mail,点击右键,新建一个键,命名为“Parameters”,点击新建的Parameters,并再次新建一个名称为“Application”的子键,数据类型为“REG_SZ”,数值为希望作为服务运行的程序的所在位置,如果你的Windows系统安装在C盘下,那么OE的程序位置就是C:\Program       Files\Outlook       Express\msimn.exe       ,把这个路径添入数值中。到现在,这个服务已经成功的添加并且设置好了。如果你希望做的更加专业,可以在Mail服务下建立一个名为Description的子键,数据类型同样为REG_SZ,数值可以写一些你对这个服务的描述,这个我们在后面可以看到。  
       
  接下来需要对服务做一些额外的设置,在运行中输入“Services.msc”并回车,在列表中找到我们刚添加的Mail服务,双击打开,来做详细的设置。在“General”选项卡上,我们需要设置这个服务的运行方式,在图二中可以看见,作为一个服务,有“自动(Automatic)”,“手动(Manual)”和“禁止(Disabled)”三种启动类型,按照需要,我们一般设置成自动就可以了。而在“Logon”选项卡下可以设置以什么身份运行这个服务,一般可以不用理会,按照默认的设置。“Recovery”选项卡下则是进行恢复设置的,你可以指定,在服务第一次,第二次和第三次出错之后分别采取什么措施。“Dependencies”则显示了服务之间的依存关系,可以让你察看这个服务的运行依赖哪些其它服务,以及还有什么服务依赖于这个服务。这后面几个对我们一般用户没有什么意义。经过这些设置,你的服务已经完全可以正常工作了。
对于不能普通方式下安装为服务的程序,用srvany.exe来实现。 
该工具添加的注册表信息并不完全,还是需要手工添加 Parameters 和 Application,并且还要 srvany.exe,和修改 ImagePath 的数值才可,否则在启动服务时显示:1053 服务没有及时响应启动或控制请求。 

在补充完全注册表信息后,就正常了。 
以下是一个例子 
存为“文件名.reg”,然后用鼠标双击这个"文件名.reg"文件,选确定,就可添加到注册表了。实际程序的参数,你需要根据具体的程序来调整。 
REGEDIT4 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\srvany\Parameters] 
"Application"="c:\\usr\\local\\bin\\dmh_wish.exe" 
"AppParameters"="-f dmh84_server startup \"after 1 {mbx whenmsg startup_RPC mbx_RPC}\"" 
"AppDirectory"="c:\\usr\\local\\bin" 



图形界面的程序,如果做成服务后(并允许与桌面交互),注销后就会被关闭,反之则弹不出图形界面,很不爽。如果你不想让别人看见,就不允许与桌面交互,那除了进程外什么都看不见。 

将容易导致系统被入侵的服务“禁用”,然后将这些服务对应的注册表键删除,这样就算对方连接到你的系统服务列表中来也不能修改服务的属性,不能修改服务属性就不能启动服务。打开注册表编辑器,依次找到“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices”项,其下的每个子键就是系统中对应的“服务”,如“Messenger”服务对应的子键是 
“Messenger”,但有的服务这两个名字不会相同,不过也很容易找到, 
“DisplayName”的键值就是服务的显示名称。这里以删除“Messenger”服务为例,其它服务方法相同,只是在注册表中删除的项不同,在删除这个项之前要先将其导出备份,然后点选“Messenger”项,按鼠标右键选择“删除”(重命名也可以)命令。此时在服务列表中双击“Messenger”就会弹出如下图所示的错误信息,当然对方连接到你的服务列表双击时也会出现这样的提示,而不是出现属性框。如果要恢复这个服务,只需将刚才备份的注册表文件导入到注册表中就可以了。 

另一种添加为自启动的方法:(Win2000/XP中适用)

在“开始→运行”中执行“Gpedit.msc”。打开“组策略”,可看到“本地计算机策略”中有两个选项:“计算机配置”与“用户配置”,展开“用户配置→管理模板→系统→登录”,双击“在用户登录时运行这些程序”子项进行属性设置,选定“设置”项中的“已启用”项并单击“显示”按钮弹出“显示内容”窗口,再单击“添加”按钮,在“添加项目”窗口内的文本框中输入要自启动的程序的路径,如图所示,单击“确定”按钮就完成了。

重新启动计算机,系统在登录时就会自动启动你添加的程序。用这种方式添加的自启动程序在系统的“系统配置实用程序”里找不到,同样在我们所熟知的注册表项中也找不到。
通过这种方式添加的自启动程序虽然被记录在注册表中,但是不在我们所熟知的注册表的[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]项和[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]项内,而是在注册表的[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run]项。


Run SRVINSTW.EXE
1. Put both files into the system32 system directory.
2. run SRVINSTW.EXE
3. Select Install as a service, Local Machine
4. Give your service any name you desire
5. When prompted for the path to the service, give the path to SERVANY.EXE in your system32 directory
6. Select Service is it’s own process
7. Set the login credentials. System account appears to work

Edit your registry
1. Run regedit.exe
2. Go to HKEY_LOCAL_MACHINE\SYSTEM\Current Control Set\Services\ (the name you picked in step 4 above)
3. Add a key = “Parameters”
4. Add a string value = “Application”. Set this to the command to run your wiki. e.g. “c:\ruby\bin\ruby.exe c:\instiki-0.9.1\instiki.rb -p 2500” (or use rubyw.exe)
5. Add a string value = “AppDirectory”. Set this to the path to ruby.exe. e.g. “c:\ruby\bin\” 

Restart your machine
1. check to see if it worked.
2. if it didn’t work, go to Control Panel\Administrative tools\services. Here you can find your service and change the settings.

用instsrv与srvany在windows 建立服务

instsrv.exe  srvany.exe

这两个文件是MS批量生产的,网上应该能烂下载。

首先将这两个文件放到自定的路径中。例如放在C:\根目录下

在CMD对话框中输入 c:\instsrv.exe  servername c:\ srvany.exe 回车

其中servername是你所需要的服务名。

之后你需要进入注册表进行相应的设置,在注册表的:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\servername

中简历Parameters子项,然后在其中建立一个字符串Application,双击该字符串,输入如下格式的语句:

C:\ABC\DEF\XXX.exe +Xms256M +Xmx256M -nodbcheck -minspan60 -retry1000

其中的256M与服务占用内存大小有关,这就要看机器的配置了。

修改结束后推出,使用命令services.msc进入服务界面,找到你刚刚定制的服务,双击进入,之后选择“登陆”,再选中“本地登陆”并确定。之后手动启动服务即可。

C:\service\instsrv.exe adslSrv "C:\service\srvany.exe"

下面介绍使用SrvAny.exe将tracd封装成windows服务,本人使用的是XP SP2,其他windows系统应该大同小异:
1.下载
Windows 2003 Resource Kits,在微软官方有下载。下载后安装,默认安装到C:\Program Files\Windows Resource Kits\Tools目录,其实我们只需要该目录下的SrvAny.exe和instsrv.exe文件即可,在此目录下还有rktools.chm帮助文件,大家可以查看SrvAny.exe如何使用。
2.创建服务,语法如下:instsrv 服务名称 srvany所在路径\srvany.exe。假设我们的
Windows 2003 Resource Kits都安装在C:\Program Files\Windows Resource Kits\Tools目录,待建立的服务名称是TracSrv,那么我们的命令如下:
"C:\Program Files\Windows Resource Kits\Tools\instsrv" TracSrv "C:\Program Files\Windows Resource Kits\Tools\srvany.exe"
需要注意的是,srvany前的路径不能省略,必须是绝对路径。

 

现在我们已经创建了一个名叫TracSrv的服务,下一步我们来配置这个服务,让它封装tracd命令。
3.在注册表中配置TracSrv服务,运行“regedit”,进入注册表。找到注册表项“HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\TracSrv”,在TracSrv项里建立新的子项“Parameters”,再在新建的 Parameters项里新建字符串值,数值名称设为“Application”,数值数据设为我们在第一篇说的启动tracd的行命令,也就是
c:\python24\python c:\python24\scripts\tracd -p 8001 C:\SCM\Angel\Angel_Trac
(注意使用全路径)。这样,我们就配置好了TracSrv服务。
4.启动TracSrv服务。现在我们就可以在浏览器中访问Trac网站,只要服务器启动,不需要进入登陆Windows桌面,我们就可以访问Trac站点了。

 

如何删除这个服务呢?使用sc.exe即可,此命令在xp系统自带。
1.停止TracSrv服务。
2.运行cmd,进入行命令窗口,输入“sc delete TracSrv",回车即可。

以上是在使用Tracd作为Web服务器时的做法,其他的Web服务器(比如Apache)本身就已经作为服务运行,不需要进行此设置。
另外,以上讲的封装服务的方法是通用的,可以使用这种方法创建新的服务来封装你的程序。


posted @ 2009-09-03 17:22  CodeYu  阅读(6560)  评论(2编辑  收藏  举报