如何使Windows知道我用Python编写的服务?
在昨天发布的另一个问题中,我对如何在Windows中将Python脚本作为服务运行提供了很好的建议。我唯一想知道的是:Windows如何了解可以在本机工具("管理工具"中的"服务"窗口)中管理的服务。 IE。在Windows下,等效于在Linux下将启动/停止脚本放在/etc/init.d中的Windows是什么?
解决方案
回答
这是将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服务。
回答
不要直接与注册表混为一谈。使用SC命令行工具。即,SC CREATE
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