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

在昨天发布的另一个问题中 ,我很好的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服务。