
Σε [άλλη ερώτηση](https://stackoverflow.com/questions/32404/can-i-run-a-python-script-as-a-service-in-windows-how "σεναρίων") που δημοσιεύτηκε χθες, πήρα πολύ καλές συμβουλές για το πώς μια Python script μπορεί να τρέξει ως υπηρεσία των Windows. Τι είμαι αριστερά αναρωτιούνται είναι: Πώς είναι τα Windows γνωρίζουν τις υπηρεσίες που μπορούν να αντιμετωπιστούν με τα εγγενή εργαλεία (παράθυρο «υπηρεσίες» σε «εργαλεία διαχείρισης»). I. ε. ποιο είναι το ισοδύναμο των Windows βάζοντας ένα start / stop script στο /etc/init.d στο Linux;

 
Πώς μπορώ να κάνω το Windows γνώση μιας υπηρεσίας που έχω γραμμένο σε Python;
=============================================================================



Όπως με τα περισσότερα «γνωρίζουν» τα πράγματα στα Windows, η απάντηση είναι «Μητρώο».


Ρίξτε μια ματιά σε αυτό το άρθρο της Γνωσιακής Βάσης της Microsoft: <http://support.microsoft.com/kb/103000>


Αναζήτηση για «Ένα πρόγραμμα Win32 που μπορεί να ξεκινήσει από τον ελεγκτή υπηρεσίας και ότι υπακούει το πρωτόκολλο ελέγχου υπηρεσίας.» Αυτό είναι το είδος της υπηρεσίας που σας ενδιαφέρει.


Η καταχώρηση υπηρεσίας (περιεχόμενο της KEY\_LOCAL\_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ myservice) μεταφέρει πληροφορίες σχετικά με την υπηρεσία, συμπεριλαμβανομένων των πραγμάτων όπως εκτελέσιμο θέση του, τι πρέπει να κάνουμε όταν αποτυγχάνει (σταματήσει το λειτουργικό σύστημα;), τι υπηρεσίες θα πρέπει να αρχίσει πριν από αυτό , τι χρήστης τρέχει σαν.


Όσον αφορά την εξυπηρέτηση πρωτόκολλο ελέγχου, main () του προγράμματος σας υποτίθεται ότι θα επικαλεστεί μια κλήση API των Windows, για τη δημιουργία callbacks για την έναρξη, διακοπή, παύση για την υπηρεσία σας. Τι να κάνετε σε αυτές τις επιστροφές κλήσεων είναι όλα στο χέρι σας.

 

Εδώ είναι ο κωδικός για να εγκαταστήσετε ένα python-σενάριο ως υπηρεσία, γραμμένο σε python :)


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


Αυτή η θέση θα μπορούσε επίσης να σας βοηθήσει:


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

 

Μπορείτε να χρησιμοποιήσετε srvany.exe από Kit των Windows NT Resource να δημιουργήσετε μια καθορισμένη υπηρεσία των χρηστών που θα εμφανιστούν στα εργαλεία διαχειριστή ...


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


Είμαι χρησιμοποιώντας αυτή τη μέθοδο για να τρέξει tracd (ένα python script / server) για trac. 


Εδώ είναι μερικές πολύ σαφείς οδηγίες: <http://www.tacktech.com/display.cfm?ttid=197>


Αυτό απαιτεί κάποια επεξεργασία του μητρώου (πολύ ελάχιστες και εύκολο), αλλά θα σας επιτρέψει να κάνετε οποιαδήποτε εντολή γραμμής / script υπηρεσία των Windows. 

 

Μην βόρβορος με το μητρώο άμεσα. Ο χρήστης το SC εργαλείο γραμμής εντολών. Δηλαδή, SC ΔΗΜΙΟΥΡΓΙΑ



```
    ΠΕΡΙΓΡΑΦΗ:
 SC είναι ένα πρόγραμμα γραμμής εντολών που χρησιμοποιούνται για την επικοινωνία με το
 NT Service Controller και υπηρεσιών.
 ΧΡΗΣΗ:
 sc [εντολή] [όνομα υπηρεσίας] ...

 Η επιλογή έχει τη μορφή «\\ ServerName»
 Περαιτέρω βοήθεια στις εντολές μπορεί να επιτευχθεί με την πληκτρολόγηση: «sc [εντολή]»
 εντολές:
 ερώτημα ----------- Ελέγχει την κατάσταση για μια υπηρεσία, ή
 απαριθμεί την κατάσταση για τους τύπους των υπηρεσιών.
 queryex --------- Ελέγχει την εκτεταμένη κατάσταση για μια υπηρεσία, ή
 απαριθμεί την κατάσταση για τους τύπους των υπηρεσιών.
 ξεκινήσει ----------- Ξεκινά μια υπηρεσία.
 παύση ----------- Στέλνει ένα αίτημα ελέγχου PAUSE σε μια υπηρεσία.
 ανακρίνουν ----- στέλνει ένα αίτημα ελέγχου INTERROGATE σε μια υπηρεσία.
 συνεχίσει -------- Στέλνει ένα αίτημα ελέγχου ΣΥΝΕΧΙΣΤΕ σε μια υπηρεσία.
 να σταματήσει ------------ Στέλνει ένα αίτημα STOP σε μια υπηρεσία.
 config ---------- Αλλάζει τη διαμόρφωση μιας υπηρεσίας (επίμονη).
 Περιγραφή ----- Αλλάζει την περιγραφή μιας υπηρεσίας.
 αποτυχία --------- Αλλάζει τις δράσεις που έχουν αναληφθεί από την υπηρεσία μετά την αποτυχία.
 qc -------------- Ελέγχει τις πληροφορίες διαμόρφωσης για μια υπηρεσία.
 qdescription ---- Ελέγχει την περιγραφή μιας υπηρεσίας.
 qfailure -------- Ελέγχει τις δράσεις που έχουν αναληφθεί από την υπηρεσία μετά την αποτυχία.
 διαγράψετε ---------- Διαγράφει μια υπηρεσία (από το μητρώο).
 δημιουργούν ---------- Δημιουργεί μια υπηρεσία. (Προσθέτει στο μητρώο).
 ελέγχου --------- Στέλνει ένα στοιχείο ελέγχου σε μια υπηρεσία.
 sdshow ---------- Εμφανίζει περιγραφή ασφαλείας μιας υπηρεσίας.
 sdset ----------- Ορίζει περιγραφή ασφαλείας μιας υπηρεσίας.
 GetDisplayName - παίρνει το εμφανιζόμενο όνομα για μια υπηρεσία.
 GetKeyName ------ παίρνει την ServiceKeyName για μια υπηρεσία.
 EnumDepend ------ Απαριθμεί Υπηρεσία εξαρτήσεις.

 Οι παρακάτω εντολές δεν απαιτούν ένα όνομα υπηρεσίας:
 sc 
 εκκίνησης ------------ (ok | κακή) Υποδεικνύει αν η τελευταία εκκίνηση θα πρέπει να
 να αποθηκευτεί ως η τελευταία γνωστή καλή ρύθμιση παραμέτρων εκκίνησης
 Κλειδώστε ------------ Κλειδώνει τη βάση δεδομένων της υπηρεσίας
 QueryLock ------- Ελέγχει την LockStatus για τη βάση δεδομένων SCManager
 ΠΑΡΑΔΕΙΓΜΑ:
 sc ξεκινήσει MyService

```
 