如何使Windows意识到我用Python编写的服务?

11

在我昨天发表的另一个问题中,我得到了非常好的建议,可以让Python脚本在Windows中作为服务运行。我现在想知道的是:Windows如何知道可以在本地工具(“管理工具”中的“服务”窗口)中管理的服务。也就是说,在Linux下将启动/停止脚本放入/etc/init.d中的Windows等效方法是什么?

4个回答

8
不要直接修改注册表,请使用SC命令行工具。具体来说,SC CREATE。
    DESCRIPTION:
        SC是一个用于与NT服务控制器和服务进行通信的命令行程序。
    USAGE:
        sc  [command] [service name]  ...
选项的格式为“\\ ServerName” 输入“sc [command]”可获取有关命令的更多帮助信息。 命令: query-----------查询服务状态或列举服务类型的状态。 queryex---------查询服务的扩展状态或枚举服务类型的状态。 start-----------启动服务。 pause-----------向服务发送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 EXAMPLE: sc start MyService

7

3
大多数Windows中的“感知”功能一样,答案是“注册表”。
查看此Microsoft知识库文章:http://support.microsoft.com/kb/103000 搜索“A Win32 program that can be started by the Service Controller and that obeys the service control protocol.” 这就是您感兴趣的服务类型。
服务注册(KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\myservice的内容)包含有关服务的信息,包括其可执行位置,失败时应该做什么(停止操作系统?),必须在此之前启动哪些服务以及它运行的用户等。
至于服务控制协议,程序的main()应调用Windows API调用,为您的服务设置启动、停止、暂停的回调。这些回调中要做什么完全由您决定。

注册表修改是不好的形式。实际上,是可怕的形式。.py 应该接受 -install 命令行参数,并使用公开的 API 和方法将自己安装为服务(例如,不通过直接注册表访问)。 - Jonesome Reinstate Monica

0

你可以使用 Windows NT 资源工具包中的 srvany.exe 创建一个用户定义的服务,该服务将显示在管理工具中...

http://support.microsoft.com/kb/137890

我正在使用这种方法来运行tracd(一个Python脚本/服务器)以供Trac使用。

以下是一些非常清晰的说明:http://www.tacktech.com/display.cfm?ttid=197

它确实需要一些注册表编辑(非常简单和容易),但将允许您将任何命令行/脚本作为Windows服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接