a „oeæ“ã @slddlZddlZddlZddlZddlZddlZddlZddlZddlZdej j vrXdndZ e Z d>dd„Zdd„Zd d „Zd d „Zd?d d„Zdd„Zd@dd„ZdAdd„Zdd„Zdd„ZdBdd„Zdd„ZdCdd„Zdd „Zd!d"„ZdDd#d$„ZdEd&d'„ZdFd(d)„ZdGd*d+„Z dHd,d-„Z!dId.d/„Z"d0d1„Z#gfd2d3„Z$dJd4d5„Z%dKd6d7„Z&d8d9„Z'dLd:d;„Z(Gd 'ú'z Can't find 'Ú pywintypesréz.dllzcopying helper dll ')ÚhasattrÚsysÚ executableÚosÚpathÚisfileÚwin32apiÚGetFullPathNamerÚjoinÚ exec_prefixÚdirnameÚ win32serviceÚ__file__ÚexistsÚprintZCopyFileÚerrorZGetModuleFileNameÚ dllhandleÚ version_infor)ZexeZcorrectÚmaybeZ python_dllZpywZ correct_pyw©rú;C:\Program Files\Certbot\pkgs\win32\lib\win32serviceutil.pyÚLocatePythonServiceExes*         rc Cs®tjtjBtjB}t tjdd|¡}t |¡d}| ¡}t d|ƒD]d}t  ||¡}t ||d|¡}z.t t  |d¡dƒ}| ¡|kr�|WSWqDtj y¦YqD0qDdS)Nú!SYSTEM\CurrentControlSet\ServicesrZ DisplayName)Úwin32conÚKEY_READÚKEY_ENUMERATE_SUB_KEYSÚKEY_QUERY_VALUErÚ RegOpenKeyÚHKEY_LOCAL_MACHINEZRegQueryInfoKeyÚlowerÚrangeÚ RegEnumKeyÚstrÚRegQueryValueExr)ZlongNameÚaccessÚhkeyÚnumÚxÚsvcZskeyZthisNamerrrÚ_GetServiceShortNameKs"ÿ ÿ  r/c Csfzt |||¡WStjyJ}z |jtjtjfvr6‚WYd}~n d}~00t ||¡}t |||¡S©N)rÚ OpenServicerrÚwinerrorZERROR_SERVICE_DOES_NOT_EXISTZERROR_INVALID_NAMEZGetServiceKeyName)ÚhscmÚnamer*ÚdetailsrrrÚSmartOpenServicehsþ r6cCsBt tjd|dtj¡}zt |d¡dW| ¡S| ¡0dS)Nú$SYSTEM\CurrentControlSet\Services\%srZ ImagePath)rr#rr$ÚKEY_ALL_ACCESSr)ÚClose)Ú serviceNamer+rrrÚLocateSpecificServiceExeusüþr;c Cs¼|st ddd|¡}|s\z0tj tj tj¡dd¡}tj |¡rF|}Wnt yZYn0|sht dƒ‚t  |¡}t  t jd|dt j¡}z†t |d¡}z^t |d dt j|¡t |d dt jd ¡t |d dt jd ¡t |ddt jd¡Wt |¡n t |¡0Wt |¡n t |¡0z^ddl}tj |¡\}}t ¡} |�rPt |¡z| d|¡Wt | ¡n t | ¡0Wn:tj�y¶} ztdƒtd| ƒWYd} ~ n d} ~ 00dS)NÚPythonZdllrrzperfmondata.dllz1The name of the performance DLL must be availabler7Z PerformanceÚLibraryZOpenZOpenPerformanceDatar9ZClosePerformanceDataZCollectZCollectPerformanceDataú python.exe z9The service was installed OK, but the performance monitorzdata could not be loaded.)rZ GetProfileValr r rÚsplitrrr ÚAttributeErrorÚ ValueErrorrr#rr$r8Ú RegCreateKeyÚ RegSetValueExÚREG_SZÚ RegCloseKeyÚperfmonÚgetcwdÚchdirZLoadPerfCounterTextStringsrr) r:ZiniNameZdllNameZtryNamer+ZsubKeyrFr ÚfnameZoldPathr5rrrÚInstallPerfmonForServiceƒs^ÿ   ü  ÿ ÿ ÿ rJcCs|dur|d|S|SdS)Nú r)ÚexeNameÚexeArgsrrrÚ_GetCommandLine¿s rNcCs4|durtj}tj}|r"|tjB}|dur0tj}dt| ƒ} t| | ƒ}t ddtj¡}z¬t  |||tj ||||dd|||¡ }| dur¬zt  |tj | ¡Wnt yªYn0|durìzt  |tj|¡Wn"tjt fyêt d¡Yn0t |¡Wt |¡n t |¡0t||ƒ| du�r0t|| | ƒdS)Nú"%s"rú*Delayed Start not available on this system)rÚSERVICE_DEMAND_STARTÚSERVICE_WIN32_OWN_PROCESSÚSERVICE_INTERACTIVE_PROCESSZSERVICE_ERROR_NORMALrrNÚ OpenSCManagerÚSC_MANAGER_ALL_ACCESSZ CreateServiceÚSERVICE_ALL_ACCESSÚChangeServiceConfig2ÚSERVICE_CONFIG_DESCRIPTIONÚNotImplementedErrorÚ&SERVICE_CONFIG_DELAYED_AUTO_START_INFOrÚwarningsÚwarnÚCloseServiceHandleÚInstallPythonClassStringrJ)ÚpythonClassStringr:Ú displayNameÚ startTypeÚ errorControlÚbRunInteractiveÚ serviceDepsÚuserNameÚpasswordrLÚ perfMonIniÚ perfMonDllrMÚ descriptionÚ delayedstartÚ serviceTypeÚ commandLiner3ÚhsrrrÚInstallServiceÆs^   óÿ ý   rnc CsŒzddl}| d|¡Wnttjfy2Yn0dt|ƒ}|durNtj}|dur\tj}t ddtj ¡}tj }|r€|tj B}t || ƒ}zÐt ||tjƒ}z¦t |||||dd|||| ¡ | durêzt |tj| ¡WntyèYn0|du�r4zt |tj|¡Wn*tjtf�y2|�r.t d¡Yn0Wt |¡n t |¡0Wt |¡n t |¡0t||ƒ| du�rˆt|| | ƒdS)Nrr>rOrP)rFÚUnloadPerfCounterTextStringsÚ ImportErrorrrrrZSERVICE_NO_CHANGErTrUrRrSrNr6rVÚChangeServiceConfigrWrXrYrZr[r\r]r^rJ)r_r:rarbrcrdrerfrLr`rgrhrMrirjrFr3rkrlrmrrrrq sj   õ ÿ  ý  rqc CsH|rDt tjd|¡}z t |dtj|¡Wt |¡n t |¡0dS)Nz0System\CurrentControlSet\Services\%s\PythonClass)rrBrr$Z RegSetValuerDrE)r_r:Úkeyrrrr^bsþr^c CsŠz |j}WntyYn0t tjd|¡}zHt|ƒtdƒkrXt ||dtj|¡nt ||dtj |¡Wt  |¡n t  |¡0dS©Nz/System\CurrentControlSet\Services\%s\Parametersr) Ú _svc_name_r@rrBrr$ÚtyperCÚ REG_DWORDrDrE)r:ÚoptionÚvaluerrrrrÚSetServiceCustomOptionps  þryc Cs”z |j}WntyYn0t tjd|¡}zRzt ||¡dWWt |¡Stjyt|YWt |¡S0Wt |¡n t |¡0dSrs) rtr@rrBrr$r)rEr)r:rwZ defaultValuerrrrrÚGetServiceCustomOption‚s$  þ ü þrzc Cs²zddl}| d|¡Wnttjfy2Yn0t ddtj¡}z0t||tj ƒ}t  |¡t  |¡Wt  |¡n t  |¡0ddl }z|  |¡Wntjy¬Yn0dS)Nrr>)rFrorprrrrTrUr6rVZ DeleteServicer]Úwin32evtlogutilZRemoveSourceFromRegistry)r:rFr3rmr{rrrÚ RemoveService–s   r|c Csft |dtj¡}zDt||tjƒ}zt ||¡}Wt |¡n t |¡0Wt |¡n t |¡0|Sr0)rrTrUr6rVÚControlServicer])r:ÚcodeÚmachiner3rmÚstatusrrrr}®sr}c CsÔt|ƒtjurt|ƒ}i}t tjd¡}d}zt ||¡}Wntj yTYqÊYn0|d}t ||¡}zt  |d¡\}}Wntj y–d}Yn0|D]*}|  ¡}|  |g¡} |   |¡| ||<qœq,t||ƒS)NrrrZDependOnServicer)rurZ UnicodeTyper(rr#rr$r'rr)r%ÚgetÚappendÚ __ResolveDeps) ÚfindNameÚdictÚkr,r.ÚskÚdepsÚtypÚdepZdep_onrrrÚ __FindSvcDeps»s.ÿ      r‹cCs<| | ¡g¡}g}|D]}| d|¡t||ƒ|}q|S©Nr)r�r%Úinsertrƒ)r„r…ÚitemsZretListr.rrrrƒ×s  rƒcCsZt|dƒD](}t||ƒd}||kr*qVt d¡q t tjdt tj¡dd…¡‚dS)z|Waits for the service to return the specified status. You should have already requested the service to enter that stateéréúÚQueryServiceStatusNéþÿÿÿ) r&r‘rÚSleeprrr2ÚERROR_SERVICE_REQUEST_TIMEOUTÚ FormatMessage)r:r€ÚwaitSecsrÚiZ now_statusrrrÚWaitForServiceStatusàs ýr˜éc Cs zt |tj¡}Wn4tjyF}z|jtjkr2‚WYd}~n d}~00t|ƒD]*}t |¡}|dtj krpqœt   d¡qPt tj dt   tj ¡dd…¡‚dS)Nréèr}r’)rr}ÚSERVICE_CONTROL_STOPrrr2ÚERROR_SERVICE_NOT_ACTIVEr&r‘ÚSERVICE_STOPPEDrr“r”r•)rmr–r€Úexcr—rrrÚ__StopServiceWithTimeoutðs    ýrŸc Cs®t |dtj¡}zŒt|ƒ}|D]:}t ||tj¡}zt||ƒWt |¡qt |¡0qt ||tj¡}zt||ƒWt |¡n t |¡0Wt |¡n t |¡0dSr0)rrTrUr‹r1rVrŸr])r:rr–r3rˆrŠrmrrrÚStopServiceWithDepss ÿ r cCst|tj|ƒSr0)r}rr›)r:rrrrÚ StopServicesr¡c Csft |dtj¡}zDt||tjƒ}zt ||¡Wt |¡n t |¡0Wt |¡n t |¡0dSr0)rrTrUr6rVÚ StartServicer])r:Úargsrr3rmrrrr¢sr¢c Cs´zt||ƒWn4tjyB}z|jtjkr.‚WYd}~n d}~00t|ƒD]Z}zt|||ƒWq°WqLtjy¤}z$|jtjkr†‚t  d¡WYd}~qLd}~00qLt dƒdS)zXStop the service, and then start it again (with some tolerance for allowing it to stop.)Nršz,Gave up waiting for the old service to stop!) r¡rrr2rœr&r¢ZERROR_SERVICE_ALREADY_RUNNINGrr“r)r:r£Z waitSecondsrržr—rrrÚRestartService+s     "r¤cCs0|tjtjfvr,tsJ‚tdƒt ¡dSdS)NzStopping debug service.TF)rÚ CTRL_C_EVENTÚCTRL_BREAK_EVENTÚg_debugServicerÚSvcStop)ZevtrrrÚ_DebugCtrlHandler@s r©c Csˆddl}td|jfƒ| d¡| |¡||ƒat td¡z&t  ¡Wt td¡| d¡dant td¡| d¡da0dS)Nrz,Debugging service %s - press Ctrl+C to stop.TF) ÚservicemanagerrrtZ DebuggingZPrepareToHostSingler§rZSetConsoleCtrlHandlerr©ÚSvcRun)ÚclsÚargvrªrrrÚ DebugServiceIs      þ  r®cCs¾|durtj}ddl}| ||j¡}|dkr°zNt |d¡}tj  |¡d}t  |¡}t |ƒdkrxtj  ||dd¡}Wn$tj yžt d|dƒ‚Yn0tj |¡d}|d|jS)NrÚ__main__éz3Could not resolve the path name '%s' to a full pathÚ.)r r­ÚpickleZ whichmoduleÚ__name__rrr r r?Z FindFilesÚlenrrÚsplitext)r¬r­r²ZmodNamerIr ZfilelistrrrÚGetServiceClassStringas"   ÿ r¶c Csdt |dtj¡}zBt||tjƒ}zt |¡}Wt |¡n t |¡0Wt |¡n t |¡0|Sr0)rrTZSC_MANAGER_CONNECTr6ZSERVICE_QUERY_STATUSr‘r])r:rr3rmr€rrrr‘{s r‘cCs´ztj tjd¡d}Wntjd}Yn0td|ƒtdƒtdƒtdƒtdƒtdƒtd ƒtd ƒtd ƒtd ƒtd ƒtdƒtdƒtdƒt d¡dS)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 r r?r r­rÚexit)rIrrrÚusageˆs6ÿÿÿÿr¸c Csfd}|durtj}t|ƒdkr$tƒ|j}|j}|dur@t|ƒ}ddl}z"| |dd…|gd¢¡\} } Wn4|jyž} zt | ƒtƒWYd} ~ n d} ~ 00d} d} d}}d}d}d}d}| D�]\}}|dkrÜ|} qÄ|dkrê|} qÄ|dkrø|}qÄ|dk�r|}qÄ|d k�rd}qÄ|d k�r’t j t j t j t j d œ}z|| ¡}Wn t�yht d |ƒYn0| ¡d k�r~d}n| ¡dk�rÊd}qÄ|dkrÄz t|ƒ}WqÄt�yÈt dƒtƒYqÄ0qÄ| d}d}|dk�r^d}t d|ƒz*t|| dd…ƒ|�rt|t j|ƒWn<t j�yX}z t d|jƒ|j}WYd}~n d}~00�n|dk�r d}t d|ƒt|| dd…ƒ|�rft|t j|ƒnÆ|dk�rfd}ttdƒ�s\d | dd…¡}z t|ƒ}WnRtj�y*}z6|jtjk�rt dƒt dƒt d¡‚WYd}~n d}~00zt d|||f¡Wnt �yXYn0n t!|| ƒ|�s€t| ƒdk�r€tƒ|dk�r(d}z |j"}Wnt#�y°d}Yn0z |j$}Wnt#�yÔd}Yn0z |j%}Wnt#�yød}Yn0z |j&}Wnt#�yd}Yn0t d|fƒz@t'||||||| | ||||||d �|�rb|| fŽt d!ƒWnºt j�yÂ}z:|jtj(k�r”d"}nt d#|j|jfƒ|j}WYd}~nnd}~0t�y&}zLt d$t)|ƒƒd%}z t*|ƒWntj�yt d&ƒYn0WYd}~n d}~00|d"k�rTd}z |j"}Wnt#�yXd}Yn0z |j$}Wnt#�y|d}Yn0z |j%}Wnt#�y d}Yn0z |j&}Wnt#�yÄd}Yn0t d'ƒz@t+|||||| | |||||||d(�|�r|| fŽt d)ƒWnBt j�yP}z&t d*|j|jfƒ|j}WYd}~n d}~00nò|d+k�rÈd}t d,|ƒzt*|ƒt d-ƒWnBt j�yÄ}z&t d.|j|jfƒ|j}WYd}~n d}~00n~|d/k�rFd}t d0|ƒz |�røt,||d1�nt-|ƒWnBt j�yD}z&t d2|j|jfƒ|j}WYd}~n d}~00|�sbd%}t d3|ƒtƒ|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)ZmanualÚautoÚdelayedZdisabledz"'%s' is not a valid startup optionr»TrºFz--waitz1--wait must specify an integer number of seconds.ÚstartzStarting service %szError starting service: %sZrestartzRestarting service %sÚdebugrrKz,The service does not appear to be installed.z/Please install the service before debugging it.z%s -debug %s %sÚinstallzInstalling service %s) rdrarcrerfrLrgrhrMrirjzService installedÚupdatez!Error installing service: %s (%d)zError installing service: %séÿÿÿÿz;Warning - could not remove the partially installed service.zChanging service configuration) rdrarcrerfrLr`rgrhrMrirjzService updatedz-Error changing service configuration: %s (%d)ÚremovezRemoving service %szService removedzError removing service: %s (%d)ÚstopzStopping service %s)r–zError stopping service: %s (%d)zUnknown command - '%s').r r­r´r¸rtZ_svc_display_name_r¶ÚgetoptrrrrQZSERVICE_AUTO_STARTZSERVICE_DISABLEDr%ÚKeyErrorÚintrAr¢r˜ÚSERVICE_RUNNINGÚstrerrorr2r¤rrr;rZERROR_FILE_NOT_FOUNDr·r ÚsystemÚKeyboardInterruptr®Ú _svc_deps_r@Ú _exe_name_Ú _exe_args_Ú_svc_description_rnZERROR_SERVICE_EXISTSr(r|rqr r¡) r¬ZserviceClassStringr­ZcustomInstallOptionsZcustomOptionHandlerÚerrr:ZserviceDisplayNamerÃZoptsr£r5rerfrgrhZstartuprjr¹r–ÚoptÚvalÚmapÚargZknownArgržZsvcArgsrLrdrMriÚmsgrrrÚHandleCommandLine¥s¶  ý    ü   ÿ                 ò  ÿ $         ò   ÿÿ       rÔc@sfeZdZdZdZdZdZdd„Zdd„Zddd „Z d d „Z d d „Z dd„Z dd„Z dd„Zdd„ZdS)ÚServiceFrameworkNcCs4ddl}| |d|jd¡|_| |j¡d|_dS)NrT)rªZRegisterServiceCtrlHandlerÚServiceCtrlHandlerExÚsshZSetEventSourceNamertÚ checkPoint)Úselfr£rªrrrÚ__init__Ês  ÿ zServiceFramework.__init__cCsNd}t|dƒr|tjB}t|dƒr6t|dƒr6|tjB}t|dƒrJ|tjB}|S)Nrr¨ÚSvcPauseÚ SvcContinueÚ SvcShutdown)rrZSERVICE_ACCEPT_STOPZSERVICE_ACCEPT_PAUSE_CONTINUEZSERVICE_ACCEPT_SHUTDOWN)rÙÚacceptedrrrÚGetAcceptedControlsÓs     z$ServiceFramework.GetAcceptedControlséˆrcCst|jdurdS|tjkrd}n| ¡}|tjtjfvr sŠ .  < ñ Jñ U          û