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

2024-04-23 10:11:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在昨天发布的another question中,我得到了关于如何在Windows中将Python脚本作为服务运行的非常好的建议。我想知道的是:Windows如何知道可以在本机工具中管理的服务(“管理工具”中的“服务”窗口)。一、 e.在Linux下,在/etc/init.d中放入一个start/stop脚本是什么意思?


Tags: 工具脚本initlinuxwindowsanotheretcstart
3条回答

不要直接破坏注册表。使用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

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

看看这篇微软知识库文章:http://support.microsoft.com/kb/103000

搜索“一个可以由服务控制器启动并遵循服务控制协议的Win32程序”,这是您感兴趣的服务类型。

服务注册(KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services的内容 \myservice)携带有关服务的信息,包括它的可执行位置、失败时的操作(停止操作系统?),在此之前必须启动哪些服务,它以何种用户身份运行。

至于服务控制协议,程序的main()应该调用一个Windows API调用,为服务设置开始、停止、暂停的回调。你在回拨中做什么都取决于你。

下面是将python脚本作为服务安装的代码,用python编写:)

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

这篇文章也可以帮助你:

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

相关问题 更多 >