在我昨天发布的另一个问题中,我得到了关于如何在 Windows 中将 Python 脚本作为服务运行的非常好的建议。我想知道的是:Windows 如何知道可以在本机工具中管理的服务(“管理工具”中的“服务”窗口)。IE。Windows 相当于在 Linux 下的 /etc/init.d 中放置启动/停止脚本是什么?
4 回答
不要直接弄脏注册表。使用 SC 命令行工具。即,SC CREATE
描述: SC 是一个命令行程序,用于与 NT 服务控制器和服务。 用法: sc [命令] [服务名称] ... 该选项的格式为“\\ServerName” 可以通过键入以下命令获得有关命令的更多帮助:“sc [command]” 命令: query-----------查询服务的状态,或者 枚举服务类型的状态。 queryex---------查询服务的扩展状态,或 枚举服务类型的状态。 start-----------启动服务。 pause-----------向服务发送暂停控制请求。 interrogate-----向服务发送一个 INTERROGATE 控制请求。 continue--------向服务发送CONTINUE控制请求。 stop------------向服务发送 STOP 请求。 config----------更改服务的配置(持久)。 description-----更改服务的描述。 failure---------更改服务在失败时采取的操作。 qc-------------查询服务的配置信息。 qdescription----查询服务的描述。 qfailure--------查询服务失败时的动作。 delete----------删除服务(从注册表中)。 create----------创建服务。(将其添加到注册表中)。 control---------向服务发送控制。 sdshow----------显示服务的安全描述符。 sdset-----------设置服务的安全描述符。 GetDisplayName--获取服务的 DisplayName。 GetKeyName------获取服务的 ServiceKeyName。 EnumDepend------枚举服务依赖。 以下命令不需要服务名称: sc boot------------(ok | bad) 表示最后一次启动是否应该 保存为最后一次正确的引导配置 Lock------------锁定服务数据库 QueryLock-------查询SCManager数据库的LockStatus 例子: sc 启动我的服务
这是将python脚本安装为服务的代码,用python编写:)
http://code.activestate.com/recipes/551780/
这篇文章也可以帮助你:
http://essiene.blogspot.com/2005/04/python-windows-services.html
与 Windows 中的大多数“感知”事物一样,答案是“注册表”。
看看这篇微软知识库文章:http: //support.microsoft.com/kb/103000
搜索“可以由服务控制器启动并遵守服务控制协议的 Win32 程序”。这是您感兴趣的服务类型。
服务注册(KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\myservice 的内容)携带有关服务的信息,包括它的可执行位置、失败时该怎么办(停止操作系统?)、在此之前必须启动哪些服务,它以什么用户身份运行。
至于服务控制协议,你的程序的 main() 应该调用一个 Windows API 调用,为你的服务设置启动、停止、暂停的回调。你在这些回调中做什么完全取决于你。
您可以使用 Windows NT Resource Kit 中的 srvany.exe 创建用户定义的服务,该服务将显示在管理工具中...
http://support.microsoft.com/kb/137890
我正在使用这种方法为 trac 运行 tracd(python 脚本/服务器)。
以下是一些非常明确的说明:http ://www.tacktech.com/display.cfm?ttid=197
它确实需要一些注册表编辑(非常简单且非常简单),但允许您将任何命令行/脚本设为 Windows 服务。