在昨天发布的另一个问题中 ,我很好的build议了Python脚本如何在Windows中作为服务运行。 我还想知道的是:Windows如何意识到可以在本机工具(“pipe理工具”中的“服务”窗口)中pipe理的服务。 I. e。 在Linux下,在/etc/init.d中放入一个启动/停止脚本的Windows相当于什么?
与Windows中大多数“意识到的”事情一样,答案是“注册表”。
看看这个Microsoft知识库文章: http : //support.microsoft.com/kb/103000
搜索“可以由服务控制器启动并遵守服务控制协议的Win32程序”。 这是你感兴趣的服务。
服务注册(KEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ myservice的内容)包含有关服务的信息,包括其可执行位置,失败时该怎么做(停止OS?),在此之前必须启动哪些服务,它运行的用户是什么。
对于服务控制协议,您的程序的main()应该调用一个Windows API调用,为您的服务设置启动,停止和暂停的回调。 你在这些回调中所做的一切都取决于你。
这里是代码来安装一个python脚本作为服务,用python写的:)
http://code.activestate.com/recipes/551780/
这篇文章也可以帮助你:
http://essiene.blogspot.com/2005/04/python-windows-services.html
不要直接与注册表混淆。 使用SC命令行工具。 即SC创建
描述: SC是一个命令行程序,用于与...进行通信 NT服务控制器和服务。 用法: sc [命令] [服务名称] ... 该选项的格式为“\\ serverName” 进一步的命令帮助可以通过输入:“sc [command]”来获得 命令: 查询-----------查询服务的状态,或 枚举服务类型的状态。 queryex ---------查询服务的扩展状态,或者 枚举服务类型的状态。 开始-----------开始一项服务。 暂停-----------向服务发送暂停控制请求。 询问-----向服务发送一个INTERROGATE控制请求。 继续--------向服务发送一个CONTINUE控制请求。 停止------------发送停止请求到服务。 config ----------更改服务的配置(持续)。 描述-----更改服务的描述。 失败---------更改失败时服务所采取的行动。 qc --------------查询服务的配置信息。 qdescription ----查询服务的描述。 qfailure --------查询服务失败时所采取的行动。 删除----------删除一个服务(从注册表)。 创建----------创建一个服务。 (将其添加到注册表中)。 控制---------将控件发送到服务。 sdshow ----------显示服务的安全描述符。 sdset -----------设置服务的安全描述符。 GetDisplayName - 获取服务的DisplayName。 GetKeyName ------获取服务的ServiceKeyName。 EnumDepend ------枚举服务依赖关系。 以下命令不需要服务名称: SC 开机------------(ok | bad)表示最后一次开机是否应该 保存为最后一次已知的启动配置 锁定------------锁定服务数据库 QueryLock -------查询SCManager数据库的LockStatus 例: sc启动MyService
您可以使用从Windows NT资源工具包srvany.exe创建一个用户定义的服务,将显示在管理工具中…
http://support.microsoft.com/kb/137890
我正在使用这种方法来trac运行tracd(一个python脚本/服务器)。
以下是一些非常明确的说明: http : //www.tacktech.com/display.cfm?ttid = 197
这确实需要一些注册表编辑(非常简单和容易),但将允许您使任何命令行/脚本一个Windows服务。