how to make a python windows service know it's own identity

Larry Bates larry.bates at websafe.com
Thu Feb 1 14:10:16 EST 2007


Chris Curvey wrote:
> Hi all,
> 
> I have used the win32com libraries to set up a service called
> MyService under Windows.  So far, so good.  Now I need to run multiple
> copies of the service on the same machine.  I also have that working.
> For monitoring and logging, I'd like each instance of the service to
> know it's own identity (MyService1, MyService2, etc.)
> 
> But I can't quite seem to grasp how to do this.  In the code below,
> the command line parameter "-i" gives the service an identity, but how
> do I get the service to understand it's identity when it is started?
> 
> Many thanks!
> 
> 
> class MyService(win32serviceutil.ServiceFramework):
>     """NT Service."""
> 
>     _svc_name_ = "MyService"
>     _svc_display_name_ = "My Service"
> 
>     _id_ = ''
> 
>     def SvcDoRun(self):
>         provider = MyServiceClass(identifier=self._id_)
>         provider.start()
> 
>         # now, block until our event is set...
>         win32event.WaitForSingleObject(self.stop_event,
> win32event.INFINITE)
> 
>    # __init__ and SvcStop snipped
> 
> 
> ###########################################################################
> if __name__ == '__main__':
>     import optparse
>     parser = optparse.OptionParser()
>     parser.add_option("-i", "--identifier", dest="identifier")
>     (opts, args) = parser.parse_args()
>     if opts.number is not None:
>         MyService._svc_name_ += opts.identifier
>         MyService._svc_display_name_ += opts.identifier
>         MyService._provider_id_ = opts.identifier
> 
>     win32serviceutil.HandleCommandLine(MyService,
> customInstallOptions="i:")
> 

What is your use case for this?  Why not make a single server
process multiple providers (store them in a list or other
container)?

-Larry Bates



More information about the Python-list mailing list