La création d'un python win32 service
Je suis en train d'essayer de créer un service win32 l'aide de pywin32. Mon principal point de référence a été ce tutoriel:
http://code.activestate.com/recipes/551780/
Ce que je ne comprends pas, c'est le processus d'initialisation, car le Démon n'est jamais initialisée directement par Daemon(), au lieu de ma compréhension de ses initialisé par le texte suivant:
mydaemon = Daemon
__svc_regClass__(mydaemon, "foo", "foo display", "foo description")
__svc_install__(mydaemon)
Où svc_install, s'occupe de la initalization, en appelant le Démon.init() et le passage de quelques arguments.
Mais comment puis-je initialiser le démon de l'objet, sans initalizing le service? Je veux faire quelques choses, avant que je l'initialisation du service. Quelqu'un a une idée?
class Daemon(win32serviceutil.ServiceFramework):
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcDoRun(self):
self.run()
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
win32event.SetEvent(self.hWaitStop)
def start(self):
pass
def stop(self):
self.SvcStop()
def run(self):
pass
def __svc_install__(cls):
win32api.SetConsoleCtrlHandler(lambda x: True, True)
try:
win32serviceutil.InstallService(
cls._svc_reg_class_,
cls._svc_name_,
cls._svc_display_name_,
startType = win32service.SERVICE_AUTO_START
)
print "Installed"
except Exception, err:
print str(err)
def __svc_regClass__(cls, name, display_name, description):
#Bind the values to the service name
cls._svc_name_ = name
cls._svc_display_name_ = display_name
cls._svc_description_ = description
try:
module_path = sys.modules[cls.__module__].__file__
except AttributeError:
from sys import executable
module_path = executable
module_file = os.path.splitext(os.path.abspath(module_path))[0]
cls._svc_reg_class_ = '%s.%s' % (module_file, cls.__name__)
Je ne suis pas sûr de comprendre la question. Pouvez-vous nous donner un exemple de ce que vous voulez que le code ci-dessus ne permet pas?
OriginalL'auteur UberJumper | 2008-11-04
Vous devez vous connecter pour publier un commentaire.
Je n'ai jamais utilisé ces Api, mais en fouillant dans le code, il semble que la classe de passe est utilisé pour enregistrer le nom de la classe dans le registre, de sorte que vous ne pouvez pas faire de l'initialisation de votre propre. Mais il y a une méthode appelée GetServiceCustomOption qui peut les aider:
http://mail.python.org/pipermail/python-win32/2006-April/004518.html
OriginalL'auteur Ned Batchelder
Je viens de créer un simple "comment", où le programme est dans un module et le service est dans un autre endroit, il utilise py2exe pour créer le service win32, je crois que c'est le meilleur que vous pouvez faire pour vos utilisateurs qui ne veulent pas se salir avec l'interpréteur python ou autres dépendances.
Vous pouvez consulter mon tutoriel ici: Créer win32 services à l'aide de Python et py2exe
Content de lire que vous l'aimez. Je suis vérification pourquoi le code est foiré.
Le lien est mort.
Le lien fonctionne à nouveau..
Le lien est dead
OriginalL'auteur markuz