oi jddlZddlZddlZddlZddlZddlZddlZddlZddl Z e Z d!dZ dZ dZdZd!dZdZ d"dZ d#d Zd Zd Zd!d Zd Zd!dZdZdZd!dZd$dZd%dZd!dZd&dZd'dZ dZ!gfdZ"d!dZ#d!dZ$dZ% d(dZ&Gdd Z'dS))Ncj|s!ttdr tjS|r3tj|rt j|Sdtj j vrdnd}d|d}tj|rt j|Stj tj |}tj tj tj|}tj|rgt#d|d|d  t j||t&jn/#t j$r}t#d |d Yd}~nd}~wwxYwtj|st+d |d t jtj}d tjjtjj|d }tj tj ||}tj|s?t#dt6jd|d t jt6j||S)Nfrozenz_d.pyd_d pythonservicez.exezmoving host exe 'z' -> ''zFailed to move host exe 'z Can't find ' pywintypesz.dllzcopying helper dll ')hasattrsys executableospathisfilewin32apiGetFullPathName importlib machineryEXTENSION_SUFFIXESjoin exec_prefixdirname win32service__file__existsprint MoveFileExwin32conMOVEFILE_REPLACE_EXISTINGerrorGetModuleFileName dllhandle version_infomajorminorr CopyFile)exesuffixcorrectmaybeexc python_dllpyw correct_pyws JC:\PYTHON\Scheduler\python\Lib\site-packages\win32/lib/win32serviceutil.pyLocatePythonServiceExer/sm 73))~ -rw~~c""-',,,!4!GGGTTRF '& & & &C w~~c-',,,gll3?C00G GLL)>?? E EE w~~e6 9%99w999::: 6  w0R S S S S~ 6 6 6 4c444 5 5 5 5 5 5 5 5 6 7>>' " "/-7---...+CM::J Ss'- Ss/?/E Sv S S SC',,rwz::C@@K 7>>+ & &< NZ%8NN NNNOOO*-{;;; Ns E11FFFc"tjtjztjz}t jtjdd|}t j|d}|}td|D]}t j ||}t j||d|} tt j |dd}||kr|cSt#tj $rYwxYwdS)N!SYSTEM\CurrentControlSet\Servicesr DisplayName)rKEY_READKEY_ENUMERATE_SUB_KEYSKEY_QUERY_VALUEr RegOpenKeyHKEY_LOCAL_MACHINERegQueryInfoKeylowerrange RegEnumKeystrRegQueryValueExr)longNameaccesshkeynumxsvcskeythisNames r._GetServiceShortNamerFPs H;;h>VV   #%JAv  D  "4 ( ( +C~~H 1c]]  !$**"4a88 83D-HHKLLH~~8++ ,~    D  4s5AC::D  D c tj|||S#tj$r*}|jtjtjfvrYd}~nd}~wwxYwtj||}tj|||SN)r OpenServicerrwinerrorERROR_SERVICE_DOES_NOT_EXISTERROR_INVALID_NAMEGetServiceKeyName)hscmnamer?detailss r.SmartOpenServicerQms'dF;;; >    1  '$            )$ 5 5D  #D$ 7 77sA A  Actjtjd|zdtj} tj|dd|S#|wxYw)N$SYSTEM\CurrentControlSet\Services\%sr ImagePath)rr6rr7r5r=Close) serviceNamer@s r.LocateSpecificServiceExerWzsf  #1[A    D 'k::1=  s AA5c~|stjddd|}|s tjtjt jdd}tj|r|}n#t$rYnwxYw|stdtj |}tj tjd|zdtj} tj|d} tj|d dtj|tj|d dtjd tj|d dtjd tj|ddtjdtj|n#tj|wxYw tj|n#tj|wxYw ddl}tj|\}}tj} |rtj| |d|ztj| dS#tj| wxYw#tj$r*} t3dt3d| Yd} ~ dSd} ~ wwxYw)NPythondllrrzperfmondata.dllz1The name of the performance DLL must be availablerS PerformanceLibraryOpenOpenPerformanceDatarUClosePerformanceDataCollectCollectPerformanceData python.exe z9The service was installed OK, but the performance monitorzdata could not be loaded.)r GetProfileValr rrsplitrrrAttributeError ValueErrorrr6rr7KEY_ALL_ACCESS RegCreateKey RegSetValueExREG_SZ RegCloseKeyperfmongetcwdchdirLoadPerfCounterTextStringsrr) rViniNamedllNametryNamer@subKeyrlrfnameoldPathrPs r.InstallPerfmonForServicervs G(5"gFF   gll l344Q79JGw~~g&& "!    D  NLMMM&w//G  #1[A    D #&t];; )  "69a' R R R  "8?4I     "HO5K     " 1ho7O      ( ( ( (H  ( ( ( ( (T""""T"""" 4gmmG,, e)++   HTNNN   . .}u/D E E E HW     BHW     >444 IJJJ )73333333334shA.B BB0GBF#G#F99GG(,AJ<I*J*JJJ<J77J<c||dz|zS|S)N )exeNameexeArgss r._GetCommandLiner|s}w&&c4| tj}tj}|r|tjz}| tj}dt | z} t | | }tjddtj} tj |||tj ||||dd||| }| 2 tj |tj | n#t$rYnwxYw|T tj |tj|n2#tjtf$rt!jddYnwxYwtj|tj|n#tj|wxYwt'||| t)|| | dSdS)N"%s"r*Delayed Start not available on this system stacklevel)rSERVICE_DEMAND_STARTSERVICE_WIN32_OWN_PROCESSSERVICE_INTERACTIVE_PROCESSSERVICE_ERROR_NORMALr/r| OpenSCManagerSC_MANAGER_ALL_ACCESS CreateServiceSERVICE_ALL_ACCESSChangeServiceConfig2SERVICE_CONFIG_DESCRIPTIONNotImplementedError&SERVICE_CONFIG_DELAYED_AUTO_START_INFOrwarningswarnCloseServiceHandleInstallPythonClassStringrv)pythonClassStringrV displayName startType errorControlbRunInteractive serviceDepsuserNamepasswordrz perfMonIni perfMonDllr{ description delayedstart serviceType commandLinerNhss r.InstallServicers$ 5 8K@|?? #8 -g666G!'733K  %dD,2T U UD%.  '     +            " 1 ?'      # 1 G  !&(;<    @Q  '+++'---- '----. <<< j*EEEEEsT=,E* C E CECE C?>E?,D.+E-D..EE0c  ddl}|d|zn#ttjf$rYnwxYwdt |z}| t j}| t j}t jddt j }t j }|r|t j z}t|| } t||t j} t j|||||dd|||| | 2 t j|t j| n#t$$rYnwxYw|V t j|t j|n4#t jt$f$r|rt)jddYnwxYwt j|n#t j|wxYw t j|n#t j|wxYwt/||| t1|| | dSdS)Nrrbrrrr)rlUnloadPerfCounterTextStrings ImportErrorrrr/rSERVICE_NO_CHANGErrrrr|rQrChangeServiceConfigrrrrrrrrrv)rrVrrrrrrrzrrrr{rrrlrNrrrs r.rrs$ ,,][-HIIII  (     -g666G 2 #5  %dD,2T U UD8K@|?? !'733K). dK1P Q Q% 0  ,   & 5LC[+D'  5$K$ %*,?@$ HUV   +B / / / /L +B / / / / /'---- '----. <<< j*EEEEEsx887G F4 DF D"F!D""F( E F .E:7F9E::F=GF((GGc|rstjtjd|z} tj|dtj|tj|dS#tj|wxYwdS)Nz0System\CurrentControlSet\Services\%s\PythonClass)rrhrr7 RegSetValuerjrk)rrVkeys r.rrks&#  ' B[ P   &  dHO=N O O O   % % % % %H  % % % %&&s !AA3c |j}n#t$rYnwxYwtjtjd|z} t |tr#tj||dtj |n"tj||dtj |tj |dS#tj |wxYwNz/System\CurrentControlSet\Services\%s\Parametersr) _svc_name_rerrhrr7 isinstanceintri REG_DWORDrjrk)rVoptionvaluers r.SetServiceCustomOptionrys !,       #= K  C" eS ! ! K  "383Eu M M M M  "38?E J J JS!!!!!S!!!!s AB--Ccb |j}n#t$rYnwxYwtjtjd|z} tj||dtj|S#tj$r|cYtj|SwxYw#tj|wxYwr) rrerrhrr7r=rkr)rVr defaultValuers r.GetServiceCustomOptionrs !,       #= K  C" +C88; S!!!!~     S!!!!  S!!!!s/ A--B>BBBB.c ddl}|d|zn#ttjf$rYnwxYwt jddt j} t||t j }t j |t j |t j |n#t j |wxYwddl } | |dS#tj$rYdSwxYw)Nrrb)rlrrrrrrrrQr DeleteServicerwin32evtlogutilRemoveSourceFromRegistry)rVrlrNrrs r. RemoveServicers! ,,][-HIIII  (       %dD,2T U UD. dK1P Q Q"2&&&'+++'---- '---- 00===== >     s+88AB44C C))C<;C<cdtj|dtj} t||tj} tj||}tj|n#tj|wxYw tj|n#tj|wxYw|SrH)rrrrQrControlServicer)rVcodemachinerNrstatuss r.rrs  %gt\5W X XD. dK1P Q Q 0!0T::F  +B / / / /L +B / / / / /'---- '---- Ms"BA(B(A>>BB-ci}tjtjd}d} tj||}n#tj$rYnwxYw|dz }tj||} tj|d\}}n#tj$rd}YnwxYw|D]F}|}||g} | || ||<Gt||S)Nr1rDependOnServicery) rr6rr7r;rr=r9getappend __ResolveDeps) findNamedictkrArCskdepstypdepdep_ons r. __FindSvcDepsrs+ D#%J  A C %a--CC~    E  q  C ( (  05FGGID##~   DDD   C))++CXXc2&&F MM#   DII" 4 ( ((s!<A A,BBBc||g}g}|D]+}|d|t|||z},|SNr)rr9insertr)rritemsretListrCs r.rrsb HHX^^%%r * *EG55q#T**W4 Nr}ct|dzD]5}t||d}||krdStjd6t jt jdtjt jdd)z|Waits for the service to return the specified status. You should have already requested the service to enter that staterQueryServiceStatusN) r:rrSleepr rrJERROR_SERVICE_REQUEST_TIMEOUT FormatMessage)rVrwaitSecsri now_statuss r.WaitForServiceStatusrs8a<   ' W==a@    EEs  2  "8#I J J3B3 O   r}c tj|tj}n2#tj$r }|jt jkrYd}~nd}~wwxYwt|D]C}tj|}|dtj krdStj dDtjt j dtj t j dd)Nrrr)rrSERVICE_CONTROL_STOPr rrJERROR_SERVICE_NOT_ACTIVEr:rSERVICE_STOPPEDrrrr)rrrr*rs r.__StopServiceWithTimeoutrs,R1RSS   <8< < <  = < < < <8__   044 !9 4 4 4 EEt  2   "8#I J J3B3 O   s"AA  AcFtj|dtj} t|}|D]`}tj||tj} t ||tj|H#tj|wxYwtj||tj} t ||tj|n#tj|wxYw tj|dS#tj|wxYwrH)rrrrrIrrr)rVrrrNrrrs r.StopServiceWithDepsr s   %gt\5W X XD.[)) 4 4C)$\5TUUB 4(X666/3333 /3333  % +|>   0 $R 2 2 2  +B / / / /L +B / / / / / '----- '----s;3D A;&D ;B#D 5CD C00D D c8t|tj|SrH)rrr)rVrs r. StopServicer"s +|'H' R RRr}cbtj|dtj} t||tj} tj||tj|n#tj|wxYw tj|dS#tj|wxYwrH)rrrrQr StartServicer)rVargsrrNrs r.rr&s  %gt\5W X XD. dK1P Q Q 0  %b$ / / /  +B / / / /L +B / / / / /'----- '----s"BA(B(A>>BB.c t||n2#tj$r }|jtjkrYd}~nd}~wwxYwt |D]\} t |||dS#tj$r4}|jtjkrtj dYd}~Ud}~wwxYwtddS)zXStop the service, and then start it again (with some tolerance for allowing it to stop.)Nrz,Gave up waiting for the old service to stop!) rr rrJrr:rERROR_SERVICE_ALREADY_RUNNINGrrr)rVr waitSecondsrr*rs r.RestartServicer2sK))))   <8< < <  = < < < < ;   > > ! dG 4 4 4 EE ! ! !|xEEE N4  ! <=====s*A=AA++B.:*B))B.c|tjtjfvr3tsJt dtdSdS)NzStopping debug service.TF)r CTRL_C_EVENTCTRL_BREAK_EVENTg_debugServicerSvcStop)evts r._DebugCtrlHandlerrGsN x$h&?@@@~ '(((   t 5r}cddl}td|jd|d||||at jtd t t jtd|ddadS#t jtd|ddawxYw)NrzDebugging service z - press Ctrl+C to stop.TF) servicemanagerrr DebuggingPrepareToHostSinglerrSetConsoleCtrlHandlerrSvcRun)clsargvrs r. DebugServicerPs  Gs~ G G GHHHT"""&&s+++SYYN "#4d;;;&'8%@@@  ''' &'8%@@@  '''s -B993C,cJ| tj}ddl}|||j}|dkr t j|d}tj |d}t j |}t|dkr,tj ||dd}n+#t j $rtd|dzwxYwtj|d}|dz|jzS)Nr__main__z3Could not resolve the path name '%s' to a full path.)r rpickle whichmodule__name__rrr rrd FindFileslenrrsplitext)rrrmodNamertrfilelists r.GetServiceClassStringrhs |xMMM  cl33G* ,T!W55E7==''*D )%00H8}}!! T8A;q>::~   EaQ  '""5))!, S=3< ''s BC(C0cbtj|dtj} t||tj} tj|}tj|n#tj|wxYw tj|n#tj|wxYw|SrH)rrSC_MANAGER_CONNECTrQSERVICE_QUERY_STATUSrr)rVrrNrrs r.rrs  %gt\5T U UD. dK1R S S 0!4R88F  +B / / / /L +B / / / / /'---- '---- Ms"BA'B'A==BB,cx tjtjdd}n#tjd}YnxYwt d|zt dt dt dt dt dt d t d t d t d t d t dt dt dtjddS)NrrzVUsage: '%s [options] install|update|remove|start [...]|stop|restart [...]|debug [...]'z1Options for 'install' and 'update' commands only:zF --username domain\username : The Username the service is to run underz4 --password password : The password for the usernamezT --startup [manual|auto|disabled|delayed] : How the service starts, default = manualz@ --interactive : Allow the service to interact with the desktop.zM --perfmonini file: .ini file to use for registering performance monitor datazB --perfmondll file: .dll file to use when querying the service forz. performance data, default = perfmondata.dllz-Options for 'start' and 'stop' commands only:z@ --wait seconds: Wait for the service to actually start or stop.zJ If you specify --wait with the 'stop' option, the servicezI and all dependent services will be stopped, each waitingz& the specified period.)r rrdr rrexit)rts r.usagersB chqk**1-  `   =>>> STTT @AAA ^ LMMM W NOOO :;;; 9::: LMMM VWWW UVVV 2333HQKKKKKs 58Arcd}| tj}t|dkrt|j}|j}|t |}ddl} ||dd|gd\} } n4#|j$r'} t| tYd} ~ nd} ~ wwxYwd} d} dx}}d}d}d}d}| D]\}}|dkr|} |dkr|} |dkr|}!|dkr|}*|d krd}3|d krtj tj tj tj d }||}|st|d |d krd}|dkrd}|dkr? t!|}#t"$r!tdtYwxYw | d}d}|dkrd}td|z t%|| dd|rt'|tj|ns#tj$r)}td|jz|j}Yd}~n@d}~wwxYw|dkrJd}td|zt/|| dd|rt'|tj|n|dkrd}t1tdsd| dd} t5|}n_#t6j$rM}|jt,jkr2tdtdtjdd}~wwxYw t=j|d|d|n #t@$rYnwxYwtC|| |s!t| dkrt|dkrwd} |j"}n#tF$rd}YnwxYw |j$}n#tF$rd}YnwxYw |j%}n#tF$rd}YnwxYw |j&}n#tF$rd}YnwxYwtd| tO||||||| | |||||| |r|| ftd!n#tj$rG}|jt,j(krd"}n%td#|j|jfz|j}Yd}~npd}~wt"$r`}td$tS|zd%} tU|n$#t6j$rtd&YnwxYwYd}~nd}~wwxYw|d"krd} |j"}n#tF$rd}YnwxYw |j$}n#tF$rd}YnwxYw |j%}n#tF$rd}YnwxYw |j&}n#tF$rd}YnwxYwtd' tW|||||| | |||||||(|r|| ftd)n=#tj$r0}td*|j|jfz|j}Yd}~nd}~wwxYw|d+krud}td,|z tU|td-n#tj$r/}td.|j|jfz|j}Yd}~nd}~wwxYw|d/krzd}td0|z |rtY||1nt[|nA#tj$r/}td2|j|jfz|j}Yd}~nd}~wwxYw|s"d%}td3|zt|S)4aoUtility function allowing services to process the command line. Allows standard commands such as 'start', 'stop', 'debug', 'install' etc. Install supports 'standard' command line options prefixed with '--', such as --username, --password, etc. In addition, the function allows custom command line options to be handled by the calling function. rNr)z password=z username=zstartup=z perfmonini=z perfmondll= interactivezwait=z --usernamez --passwordz --perfmoniniz --perfmondllz --interactivez --startup)manualautodelayeddisabledz is not a valid startup optionrTrFz--waitz1--wait must specify an integer number of seconds.startzStarting service %szError starting service: %srestartzRestarting service %sdebugrrxz,The service does not appear to be installed.z/Please install the service before debugging it.z -debug installzInstalling service ) rrrrrrzrrr{rrzService installedupdatez!Error installing service: %s (%d)zError installing service: %sz;Warning - could not remove the partially installed service.zChanging service configuration) rrrrrrzrrrr{rrzService updatedz-Error changing service configuration: %s (%d)removezRemoving service %szService removedzError removing service: %s (%d)stopzStopping service %s)rzError stopping service: %s (%d)zUnknown command - '%s').r rr rr_svc_display_name_rgetoptrrrrSERVICE_AUTO_STARTSERVICE_DISABLEDrr9rrfrrSERVICE_RUNNINGstrerrorrJrr rrWrERROR_FILE_NOT_FOUNDrr systemKeyboardInterruptr _svc_deps_re _exe_name_ _exe_args__svc_description_rERROR_SERVICE_EXISTSr<rrrr) rserviceClassStringrcustomInstallOptionscustomOptionHandlererrrVserviceDisplayNamer&optsrrPrrrrstartuprrroptvalmapargknownArgr*svcArgsrzrr{rmsgs r.HandleCommandLinerAs+  C |x 4yyA~~ .K/!2377MMM]] H       dd < g HH""JGLKHS ,  HH L HH N " "JJ N " "JJ O # #KK K  &;$7':(9 C ggciikk**G @>>>???yy{{i''# &&$ H__ s88   IJJJ  q'CH g~~ #{3444  d122h / / / $!=x!    .= > > >,CCCCCC    %5666{DH---  V l.JH U U U sH%% $hhtABBx((G 2;??>   <8#@@@HIIIKLLLHQKKK     WEEkEEGEEFFFF%     d # # # D Q  i .KK   KKK  nGG   GGG  nGG   GGG  /KK   KKK  1K11222 ' U ""'! +!!%%')     # .##dW-- % & & & &! # # #|x<<<73<:VVl U U U 03s88; < < <C  Uk****> U U USTTTTT U U h .KK   KKK  nGG   GGG  nGG   GGG  /KK   KKK  .///  "'! +!!.%%')     # .##dW-- # $ $ $ $!    ?<./   ,CCCCCC    #{3444  + & & & # $ $ $ $!    3s|S\6RR S S S,CCCCCC   #{3444  )#K(CCCCCK(((!    3s|S\6RR S S S,CCCCCC   &,---  Js$A;; B,B''B,!F11'GG5H==I5 I00I5LM/"AM**M/3N NNO%% O43O48P PPP P*)P*.P66 QQ4RU=S!! U.!U T U  U>U UU  UU"" U10U15U== V  V V V'&V'+V33 WW4X Y %YY (Z[%[[##\]%]]cXeZdZdZdZdZdZdZdZ d dZ dZ dZ d Z d Z d Zd ZdS)ServiceFrameworkNcddl}||d|jd|_||jd|_dS)NrT)rRegisterServiceCtrlHandlerServiceCtrlHandlerExsshSetEventSourceNamer checkPoint)selfrrs r.__init__zServiceFramework.__init__sV!<< GT.   ))$/:::r}cd}t|dr|tjz}t|drt|dr|tjz}t|dr|tjz}|S)NrrSvcPause SvcContinue SvcShutdown)r rSERVICE_ACCEPT_STOPSERVICE_ACCEPT_PAUSE_CONTINUESERVICE_ACCEPT_SHUTDOWN)rJaccepteds r.GetAcceptedControlsz$ServiceFramework.GetAcceptedControlss~ 4 # # 9  8 8H 4 $ $ C})E)E C  B BH 4 ' ' =  < > >HH//11H   (  (   JJ OOq OOJ  2        %dh77777r}cD|tjdSrH)r]rr)rJs r.SvcInterrogatezServiceFramework.SvcInterrogates   !=>>>>>r}cN td|zdS#t$rYdSwxYw)NzUnknown control status - %d)rOSErrorrJcontrols r.SvcOtherzServiceFramework.SvcOther sC  /'9 : : : : :    DD s  $$c0||ddSr)rFrcs r.ServiceCtrlHandlerz#ServiceFramework.ServiceCtrlHandlers((!T:::r}c,||SrH)rerJrd event_typedatas r. SvcOtherExzServiceFramework.SvcOtherExs}}W%%%r}c|tjkr|S|tjkr|S|tjkr|S|tjkr|S|tj kr| S| |||SrH) rrrSERVICE_CONTROL_PAUSErMSERVICE_CONTROL_CONTINUErNSERVICE_CONTROL_INTERROGATEr`SERVICE_CONTROL_SHUTDOWNrOrlris r.rFz%ServiceFramework.ServiceCtrlHandlerExs l7 7 7<<>> !  : : :==?? "  = = =##%% %  @ @ @&&(( (  = = =##%% %??7J== =r}c|tj||tjdSrH)r]rr)SvcDoRunSERVICE_STOP_PENDINGr_s r.rzServiceFramework.SvcRun'sG   !=>>>    !BCCCCCr})rUrr)r  __module__ __qualname__r.r/r0r1rKrTr]r`rergrlrFrryr}r.rCrCs JJJ    JK8888>???;;;&&& > > >DDDDDr}rCrH) NNrNNNNNNNNN) NNrNNNNNNNNNN)r)Nr)NN)NrN)NNrN)(importlib.machineryrr r rr rrrrJ RuntimeErrorrr/rFrQrWrvr|rrrrrrrrrrrrrrrrrrrrrArCryr}r.rys 1111h: 8 8 8   94949494x    FFFFFFFFX    TFTFTFTFn & & &"""$""""(   0    )))4         &....0SSSS . . . .>>>>*0((((4    >  QQQQnrDrDrDrDrDrDrDrDrDrDr}