2012-10-12 125 views
0

不行,我有一个Python程序,该程序将调用一个cmd(showTxt.exe)做一些事情,环境路径窗口服务

当我运行这个Python程序in console,它工作正常(的showTxt。 exe文件)。

p = Tarser(self.conf_parser) 
p.parse() 

但是当我运行该程序作为windows service,该showTxt.exe似乎不起作用。

我已经将showTxt.exe的目录路径保存到environment path

我检查Event Logs,没有错误或警告

,改变showTxt.exe的安全设置不起作用。

class MyService(win32serviceutil.ServiceFramework): 
    """Windows Service.""" 
    os.chdir(os.path.dirname(__file__)) 
    ini = "tarser_service.ini" 
    conf_parser = ConfigParser.SafeConfigParser() 
    conf_parser.read(ini) 
    _svc_name_, _svc_display_name_, _svc_description_ = get_win_service(conf_parser) 

    def __init__(self, args): 
     if os.path.dirname(__file__): 
      os.chdir(os.path.dirname(__file__)) 
     win32serviceutil.ServiceFramework.__init__(self, args) 

     # create an event that SvcDoRun can wait on and SvcStop can set. 
     self.stop_event = win32event.CreateEvent(None, 0, 0, None) 

    def SvcDoRun(self): 
     self.Run() 
     win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE) 

    def SvcStop(self): 
     self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) 
     win32event.SetEvent(self.stop_event) 
     LoggerInstance.log("Tarser service is stopped") 
     self.ReportServiceStatus(win32service.SERVICE_STOPPED) 
     sys.exit() 

    def Run(self): 
     LoggerInstance.log("Tarser service is running, configuration: %s" %(self.ini,)) 
     if ((not self.conf_parser.has_section('Tsc')) or 
      (not self.conf_parser.has_option('Tsc', 'check_interval')) or 
      (not self.conf_parser.has_option('Tsc', 'running_time'))): 
      LoggerInstance.log('Tarser service: no Tsc service parameters') 
      self.SvcStop() 

     # set configuration parameters from ini configuration 
     self.check_interval = self.conf_parser.getint('Tsc', 'check_interval') 
     running_time = self.conf_parser.get('Tsc', 'running_time') 
     TscCheck_time = time.strptime(running_time, "%H %M") 

     while 1: 
      curr_time = time.gmtime() 
      if curr_time.tm_hour == TscCheck_time.tm_hour and curr_time.tm_min == TscCheck_time.tm_min: 
       p = Tarser(self.conf_parser) 
       p.parse() 
      #LoggerInstance.log("Tarser service: sleep %d seconds" %self.check_interval) 
      time.sleep(self.check_interval) 

回答

0

将showTxt.exe的目录路径添加到系统环境路径,而不是用户的环境路径。