Dans another question J'ai posté hier, j'ai obtenu de très bons conseils sur la façon dont un script Python pourrait être exécuté en tant que service dans Windows. Ce que je me suis demandé est: Comment Windows est-il conscient des services qui peuvent être gérés dans les outils natifs (fenêtre "services" dans "outils d'administration"). C'est à dire. Quel est l'équivalent Windows de mettre un script start/stop dans /etc/init.d sous Linux?Comment informer Windows d'un service que j'ai écrit en Python?
Répondre
Comme la plupart des choses "conscientes" dans Windows, la réponse est "Registre".
Jetez un oeil à cet article Base de connaissances Microsoft: http://support.microsoft.com/kb/103000
Recherche « Un programme Win32 qui peut être démarré par le contrôleur de service et qui obéit le protocole de contrôle de service. » C'est le genre de service que vous êtes intéressé.
L'enregistrement de services (contenu de KEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ myservice) Carriès informations sur le service, y compris des choses comme son emplacement exécutable, quoi faire quand il échoue (arrêter le système d'exploitation?), quels services doivent être démarrés avant celui-ci, quel utilisateur il exécute comme. En ce qui concerne le protocole de contrôle de service, main() de votre programme est supposé appeler un appel d'API Windows, en configurant des rappels pour le démarrage, l'arrêt et la pause pour votre service. Ce que vous faites dans ces rappels est tout pour vous.
Voici le code à installer un script python en tant que service, écrit en python :)
http://code.activestate.com/recipes/551780/
Ce poste pourrait aussi vous aider:
http://essiene.blogspot.com/2005/04/python-windows-services.html
Vous pouvez utiliser srvany.exe de Windows NT Resource Kit pour créer un service défini par l'utilisateur qui apparaissent dans les outils d'administration ...
http://support.microsoft.com/kb/137890
J'utilise cette méthode pour exécuter tracd (un script/serveur python) pour trac.
Voici quelques instructions très claires: http://www.tacktech.com/display.cfm?ttid=197
Il ne nécessite quelques modifications de registre (très minime et facile), mais vous permettra de faire une ligne de commande/script un service Windows.
Ne collez pas le registre directement. Utilisateur l'outil de ligne de commande SC. A savoir, 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
- 1. Service Windows écrit des fichiers sur le partage réseau
- 2. Impossible d'accéder au serveur Python fonctionnant en tant que service Windows
- 3. Exécution de JAI dans OSGi
- 4. Tomcat Journalisation en cours d'exécution en tant que service Windows
- 5. Exécution d'un serveur Web Python en tant que service sous Windows
- 6. Windows Mobile - Programme Compact Framework en tant que service?
- 7. Puis-je exécuter un script Python en tant que service?
- 8. écrit à un fichier via FTP en python
- 9. Qu'est-ce que c'est écrit?
- 10. Plusieurs instances de même application en tant que service Windows?
- 11. Installer EXE en tant que service sur Windows 2008 Server
- 12. JAI Changer la résolution JPEG
- 13. Comment puis-je exécuter une application CLI en tant que service Windows?
- 14. Détecter la déconnexion de Windows en Python
- 15. Windows Service COM erreur?
- 16. Comment créer une application Windows pouvant fonctionner avec une interface graphique * ou * en tant que service Windows en C#?
- 17. Problème de service Windows py2exe
- 18. Comment arrêter un service Windows par programme?
- 19. WCF dans un service Windows
- 20. Est-ce que hg commit est censé informer Fogbugz?
- 21. Windows Activation Service sur Windows 2003
- 22. Générateur d'installateur écrit en Java?
- 23. Comment modifier l'utilisateur "se connecter en tant que" dans un service Windows .Net
- 24. SCardEstablishContext se bloque en tant que service
- 25. Comment puis-je obtenir mon script post-commit de git (msysgit on windows) pour appeler mon script python en tant que python plutôt que bash?
- 26. Env Variables en Python (v3.0) sous Windows
- 27. Script Python - SCP sous Windows
- 28. Howto rendre ce Windows Service-scénario avenante que possible
- 29. base64 png en python sous Windows
- 30. Est-il possible de créer un service Web C# autonome, déployé en tant que service EXE ou Windows?
les hacks de registre sont de mauvaise forme. En fait, forme horrible. Le fichier .py doit accepter le paramètre de ligne -install cmd et s'installer en tant que service, en utilisant les API publiées et les méthodes pour le faire (par exemple, PAS via un accès direct au registre) – Jonesome