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

后端 未结 4 1253
旧巷少年郎
旧巷少年郎 2020-12-23 18:08

In another question I posted yesterday, I got very good advice on how a Python script could be run as a service in Windows. What I\'m left wondering is: How is Windows aware

相关标签:
4条回答
  • 2020-12-23 18:46

    Here is code to install a python-script as a service, written in python :)

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

    This post could also help you out:

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

    0 讨论(0)
  • 2020-12-23 18:47

    As with most "aware" things in Windows, the answer is "Registry".

    Take a look at this Microsoft Knowledge Base article: http://support.microsoft.com/kb/103000

    Search for "A Win32 program that can be started by the Service Controller and that obeys the service control protocol." This is the kind of service you're interested in.

    The service registration (contents of KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services \myservice) carries information about the service, including things like its executable location, what to do when it fails (halt the OS?), what services must be started before this one, what user it runs as.

    As to service control protocol, main() of your program is supposed to invoke a Windows API call, setting up callbacks for start, stop, pause for your service. What you do in those callbacks is all up to you.

    0 讨论(0)
  • 2020-12-23 19:04

    Don't muck with the registry directly. User the SC command-line tool. Namely, 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
    
    0 讨论(0)
  • 2020-12-23 19:07

    You can use srvany.exe from Windows NT Resource Kit to create a user defined service that will show up in the admin tools...

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

    I am using this method to run tracd (a python script / server) for trac.

    Here are some very clear instructions: http://www.tacktech.com/display.cfm?ttid=197

    It does require some registry editing (very minimal and easy) but will allow you to make any command line / script a windows service.

    0 讨论(0)
提交回复
热议问题