当前位置:首页> 正文

如何使Windows知道我用Python编写的服务?

如何使Windows知道我用Python编写的服务?

How do I make Windows aware of a service I have written in Python?

在昨天发布的另一个问题中,我对如何在Windows中将Python脚本作为服务运行提供了很好的建议。 我唯一想知道的是:Windows如何了解可以在本机工具("管理工具"中的"服务"窗口)中管理的服务。 即 在Windows下,等效于在Linux下将启动/停止脚本放在/etc/init.d中的Windows是什么?


不要直接与注册表混淆。使用SC命令行工具。即,SC CREATE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    DESCRIPTION:
        SC is a command line program used for communicating with the
        NT Service Controller and services.
    USAGE:
        sc  [command] [service name]  ...

        The option  has the form"\\ServerName"
        Further help on commands can be obtained by typing:"sc [command]"
        Commands:
          query-----------Queries the status for a service, or
                          enumerates the status for types of services.
          queryex---------Queries the extended status for a service, or
                          enumerates the status for types of services.
          start-----------Starts a service.
          pause-----------Sends a PAUSE control request to a service.
          interrogate-----Sends an INTERROGATE control request to a service.
          continue--------Sends a CONTINUE control request to a service.
          stop------------Sends a STOP request to a service.
          config----------Changes the configuration of a service (persistant).
          description-----Changes the description of a service.
          failure---------Changes the actions taken by a service upon failure.
          qc--------------Queries the configuration information for a service.
          qdescription----Queries the description for a service.
          qfailure--------Queries the actions taken by a service upon failure.
          delete----------Deletes a service (from the registry).
          create----------Creates a service. (adds it to the registry).
          control---------Sends a control to a service.
          sdshow----------Displays a service's security descriptor.
          sdset-----------Sets a service'
s security descriptor.
          GetDisplayName--Gets the DisplayName for a service.
          GetKeyName------Gets the ServiceKeyName for a service.
          EnumDepend------Enumerates Service Dependencies.

        The following commands don't require a service name:
        sc  
          boot------------(ok | bad) Indicates whether the last boot should
                          be saved as the last-known-good boot configuration
          Lock------------Locks the Service Database
          QueryLock-------Queries the LockStatus for the SCManager Database
    EXAMPLE:
        sc start MyService

这是将python-script作为服务安装的代码,以python编写:)

http://code.activestate.com/recipes/551780/

这篇文章还可以帮助您:

http://essiene.blogspot.com/2005/04/python-windows-services.html


与Windows中大多数"知道"的东西一样,答案是"注册表"。

看一下这篇Microsoft知识库文章:http://support.microsoft.com/kb/103000

搜索"可以由服务控制器启动并遵守服务控制协议的Win32程序"。这是您感兴趣的一种服务。

服务注册(KEY_LOCAL_MACHINE SYSTEM CurrentControlSet Services的内容
myservice)包含有关服务的信息,包括其可执行位置,发生故障(停止OS?)时应采取的措施,在此服务之前必须启动的服务,以什么用户身份运行等信息。

至于服务控制协议,程序的main()应该调用Windows API调用,为服务的启动,停止,暂停设置回调。您在这些回调中所做的全部取决于您。


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

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

我正在使用此方法为trac运行tracd(一个python脚本/服务器)。

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

它确实需要进行一些注册表编辑(非常简单),但是可以使任何命令行/脚本成为Windows服务。


展开全文阅读

相关内容