如果我们想让系统启动的时候就执行某个程序,windows系统和unix系统是不一样的,对于unix只需要将要执行的命令放到 rc.local中,系统重新启动的时候就可以加载了。windows就麻烦多了,如果你将程序放到启动组中,只有输入了密码后,程序才被执行,如果想在 系统一启动的时候就执行程序,必须使用nt服务。
python下如何使用nt服务,其实很简单。
下载python的win32支持。我使用的是:pywin32-202.win32-py2.3.exe安装好后就可以来写我们的服务了。
我们先来建立一个空的服务,建立test1.py这个文件,并写入如下代码:
# -- coding: cp936 --
import win32serviceutil
import win32service
import win32event
class test1(win32serviceutil.ServiceFramework):
_svcname = "test_python"
_svc_displayname = "test_python"
def init(self, args):
win32serviceutil.ServiceFramework.init(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcStop(self):
# 先告诉SCM停止这个过程
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
# 设置事件
win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
# 等待服务被停止
win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)
if name==’main‘:
win32serviceutil.HandleCommandLine(test1)
这里注意,如果你需要更改文件名,比如将win32serviceutil.HandleCommandLine(test1)中的test1更改为你的文件名,同时class也需要和你的文件名一致,否则会出现服务不能启动的问题。
在命令窗口执行,test1.py可以看到帮助提示
C:>test1.py
Usage: ‘test1.py [options] install|update|remove|start […]|stop|restart […]|
debug […]’
Options for ‘install’ and ‘update’ commands only:
–username domainusername : The Username the service is to run under
–password password : The password for the username
–startup [manual|auto|disabled] : How the service starts, default = manual
–interactive : Allow the service to interact with the desktop. (for my auto_desktop.py, this option is needed)
C:>
安装我们的服务
[code:1:05b7353f1c]C:>test1.py install
Installing service test_python to Python class C:test1.test1
Service installed
C:>
我们就可以用命令或者在控制面板-》管理工具-》服务中管理我们的服务了。在服务里面可以看到test_python这个服务,虽然这个服务什么都不做,但能启动和停止他。
————————————————————————————————————————————————————————关于如何注册Windows2000服务想让一个程序在启动系统的时候自动运行,你有什么好办法?添加到启动组?那如果别人删除掉就不管用了。如果你使用了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_MACHINESYSTEMCurrentControlSet Services 下,找到刚才添加的Mail,点击右键,新建一个键,命名为“Parameters”,点击新建的Parameters,并再次新建一个名称为 “Application”的子键,数据类型为“REG_SZ”,数值为希望作为服务运行的程序的所在位置,如果你的Windows系统安装在C盘下,那 么OE的程序位置就是C:Program FilesOutlook Expressmsimn.exe ,把这个路径添入数值中。到现在,这个服务已经成功的添加并且设置好了。如果你希望做的更加专业,可以在Mail服务下建立一个名为 Description的子键,数据类型同样为REG_SZ,数值可以写一些你对这个服务的描述,这个我们在后面可以看到。
接下来需要对服务做一些额外的设置,在运行中输入 “Services.msc”并回车,在列表中找到我们刚添加的Mail服务,双击打开,来做详细的设置。在“General”选项卡上,我们需要设置这 个服务的运行方式,在图二中可以看见,作为一个服务,有“自动(Automatic)”,“手动(Manual)”和“禁止(Disabled)”三种启 动类型,按照需要,我们一般设置成自动就可以了。而在“Logon”选项卡下可以设置以什么身份运行这个服务,一般可以不用理会,按照默认的设置。 “Recovery”选项卡下则是进行恢复设置的,你可以指定,在服务第一次,第二次和第三次出错之后分别采取什么措施。“Dependencies”则 显示了服务之间的依存关系,可以让你察看这个服务的运行依赖哪些其它服务,以及还有什么服务依赖于这个服务。这后面几个对我们一般用户没有什么意义。经过 这些设置,你的服务已经完全可以正常工作了。
注销一下看看。为了让你看清除,我们先打开OE,这时在任务管理器里,有两个msimn进程,用户名为“.com.cn”的是我们打开的OE,而用户名为“SYSTEM”的就是我们添加的服务。
如果你玩够了,不想再运行这个服务,可以直接禁止它在启动的时候运行,或者使用Instsrv.exe程序删除。方法是在命令行下输入“c: instsrv.exe Mail remove”,然后回车就可以了。需要注意的是Instsrv.exe这个程序也可以删除某些系统服务,所以使用的时候一定要小心,对于系统服务,安全 起见千万不要删除,哪怕你觉得它对你没有用。