[python-win32] manipulating service action restart behavior?

Andrew Hammond andrew.george.hammond at gmail.com
Wed Aug 10 02:56:48 CEST 2011


I did some more hunting around and now have the following:

hscm =
win32service.OpenSCManager(None,None,win32service.SC_MANAGER_ALL_ACCESS)
try:
    hs = win32serviceutil.SmartOpenService(hscm, cls._svc_name_,
win32service.SERVICE_ALL_ACCESS)
    try:
        service_failure_actions = {
            'ResetPeriod': 6000000,   # Time in seconds after which to reset
the failure count to zero.
            'RebootMsg': '',
            'lpCommand': '',
            'Actions': [(win32service.SC_ACTION_RESTART, 60000),
(win32service.SC_ACTION_RESTART, 60000)]
        }
        win32service.ChangeServiceConfig2(hs,
win32service.SERVICE_CONFIG_FAILURE_ACTIONS, service_failure_actions)
    finally:
        win32service.CloseServiceHandle(hs)
finally:
    win32service.CloseServiceHandle(hscm)

However, I'm getting the following error message:

TypeError: SERVICE_FAILURE_ACTIONS must be a dictionary containing
{'ResetPeriod':int,'RebootMsg':unicode,'lpCommand':unicode,'Actions':sequence
of 2 tuples(int,int)

Which I think is what I'm feeding it. Can someone please tell me what I'm
doing wrong?

A

On Mon, Aug 8, 2011 at 7:06 PM, Andrew Hammond <
andrew.george.hammond at gmail.com> wrote:

> I am trying to control the behavior of a service with regards to failure
> handling as described here:
> http://blogs.msdn.com/b/jcalev/archive/2008/01/10/some-tricks-with-service-restart-logic.aspx
>
> I have done some reading and have the following snippet of code that I
> think is going in the right direction. However I don't know how to create
> the action list. I suspect that it should be an array of unsigned long ints,
> but... ???
>
>
>         hscm =
> win32service.OpenSCManager(None,None,win32service.SC_MANAGER_ALL_ACCESS)
>
>         try:
>             hs = SmartOpenService(hscm, cls._svc_name_,
> win32service.SERVICE_ALL_ACCESS)
>             try:
>                 # What's the pythonic way to create these???
>                 action1 = Action()
>                 action1.Type = win32service.SC_ACTION_RESTART
>                 action1.Delay = 600  # 10 minutes?
>
>                 action2 = Action()
>                 action2.Type = win32service.SC_ACTION_RESTART
>                 action2.Delay = 600
>
>                 action3 = Action()
>                 action3.Type = win32service.SC_ACTION_RESTART
>                 action3.Delay = 600
>
>                 win32service.ChangeServiceConfig2(
>                     hs,
>                     win32service.SERVICE_CONFIG_FAILURE_ACTIONS,
>                     [action1,action2,action3]  # again, this isn't probably
> right, but... ?
>                 )
>             finally:
>                 win32service.CloseServiceHandle(hs)
>         finally:
>             win32service.CloseServiceHandle(hscm)
>
> Can anyone help please?
>
> Andrew
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-win32/attachments/20110809/3282164c/attachment.html>


More information about the python-win32 mailing list