2012-01-20 13 views
16

मैं एक साधारण सेवा उदाहरण शुरू करने के लिए कोशिश कर रहा हूँ:Windows सेवा अजगर (win32serviceutil) में लिखा प्रारंभ नहीं कर सकता

someservice.py:

import win32serviceutil 
import win32service 
import win32event 

class SmallestPythonService(win32serviceutil.ServiceFramework): 
    _svc_name_ = "SmallestPythonService" 
    _svc_display_name_ = "display service" 

    def __init__(self, args): 
     win32serviceutil.ServiceFramework.__init__(self, args) 
     self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) 

    def SvcStop(self): 
     self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) 
     win32event.SetEvent(self.hWaitStop) 

    def SvcDoRun(self): 
     win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) 

if __name__=='__main__': 
    win32serviceutil.HandleCommandLine(SmallestPythonService) 

जब मैं चलाने

python someservice.py install 

सब कुछ ठीक है और सेवा विंडोज सेवा सूची में दिखाई देती है, लेकिन

python someservice.py start 

"त्रुटि 1053" में विफल रहता है: सेवा ने समय-समय पर प्रारंभ या नियंत्रण अनुरोध का जवाब नहीं दिया ", लेकिन इसमें कोई देरी नहीं है।

मैंने एक समाधान googled, जो कहा कि यह तब होता है जब pythonservice.exepython27.dll का पता नहीं लगा सकता है। यह वास्तव में ऐसा नहीं कर सका इसलिए मैंने C:\Python27PATH जोड़ा। अब pythonservice.exe ठीक चलाता है, लेकिन त्रुटि 1053 अभी भी वहां है।

मैं पाइथन 2.7.2 को विंडोज 7 अल्टीमेट पर व्यवस्थापक विशेषाधिकारों के साथ चला रहा हूं।

+0

यह मेरे लिए काम करता है, पाइथन 2.6.6 (64 बिट) और पायविन 32 216 amd64-py26 चला रहा है। मुझे एहसास है कि हालांकि बहुत उपयोगी नहीं है। विंडोज 7 प्रो पर। – jgritty

+3

+1 यह उल्लेख करने के लिए कि त्रुटि 1053 होती है यदि 'pythonservice.exe'' python27.dll' का पता नहीं लगा सकता है। इसे हमेशा समझने के लिए मुझे ले लिया! धन्यवाद :) – Gili

उत्तर

3

मेरा मानना ​​है कि अगर आप

def SvcDoRun(self): 
     self.ReportServiceStatus(win32service.SERVICE_RUNNING) 
     win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) 
9

इसके अलावा करने के लिए से

def SvcDoRun(self): 
     win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) 

विधि SvcDoRun बदलने

, धन्यवाद यह एक DLL समस्या हो सकती है कि उनका कहना है के लिए अपनी समस्या ठीक किया जाएगा , जिससे मुझे सही समाधान मिल गया।

आपको जो करना है वह पाइथन 27 को सिस्टम पाथ में जोड़ना है, न कि उपयोगकर्ता पथ के लिए, क्योंकि डिफ़ॉल्ट रूप से पाइथन सेवा 'लोकलसिस्टम' के रूप में स्थापित की जाएगी और इसलिए जब इसे शुरू करने का प्रयास किया जाता है तो यह सिस्टम का उपयोग करता है पाथ चर - यही कारण है कि आप इसे कमांड प्रॉम्प्ट से चला सकते हैं, आपका यूजर पाथ सही है।

उम्मीद है कि यह मदद करता है!

+5

यह इस समस्या में आपके सिस्टम पथ में इन निर्देशिकाओं को जोड़ने के लिए उपयोगी साबित हो सकता है: 'C: \ Python27 \ Lib \ site-packages \ win32' और' C: \ Python27 \ Lib \ site-packages \ pywin32_system32' । इससे आपको आसानी से पायथन सेवा का उपयोग करने दिया जाएगा। – BuvinJ

+0

@ बुविन जी ने PythonService.exe का उपयोग करते समय मेरी त्रुटि 1053 तय की। धन्यवाद! – Kenneth

+0

@mpaf क्या आप सिस्टम पथ में सामान जोड़ने का वर्णन करने में सहायता कर सकते हैं? आह मैं देखता हूं, आप बस इसे 'सिस्टम कंट्रोल पैनल' में समग्र कंप्यूटर सिस्टम पथ में जोड़ते हैं।व्यक्तिगत रूप से मुझे एनाकोंडा को https://www.snip2code.com/Snippet/770602/setup-python-script-as-windows- सेवा में जोड़ना पड़ा –

1

एक अन्य उपयोगी टिप निम्न पंक्ति

sys.frozen = 'windows_exe' # Fake py2exe so we can debug

जोड़ने के लिए इससे पहले कि आप इस तरह आप क्या गलत हो जाता है की सेवा से अधिक उपयोगी जानकारी प्राप्त कर सकते फोन

win32serviceutil.HandleCommandLine(...)

है।

संबंधित मुद्दे