Python Windows Service and registering for preshutdown?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Python Windows Service and registering for preshutdown?

Lincoln Yeoh
Hi,

Is it easy to create a python windows service that registers for the
preshutdown event[1]?

Basically I would like a window service that will help shutdown .Net
(and possibly other) services in the right order.

Because:
http://connect.microsoft.com/VisualStudio/feedback/details/641737/add-windows-service-preshutdown
"A Windows service in C# cannot be registered to preshutdown
notifications. It is possible in C++ but not in C# with the current
.net framework"

http://support.microsoft.com/kb/203878

"When a service is dependendent on other services, the Service
Control Manager (SCM) will automatically start the dependencies
before starting the dependent service itself. However, during system
shutdown, the SCM does not take dependencies into consideration when
stopping services. It simply enumerates the list of running services
and sends a SERVICE_CONTROL_SHUTDOWN command to all of them. Thus, a
service may stop responding or fail because another service it
depends upon has already stopped."

(yeah weird right?)

And, since I'm a crappy and lazy programmer I think it'll be easier
for me to write such a thing in Python than C++, reasonably quickly,
with the features I want and with not too many bugs.

Regards,

Link.

[1] http://msdn.microsoft.com/en-us/magazine/cc164252.aspx#S2

_______________________________________________
python-win32 mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/python-win32
Reply | Threaded
Open this post in threaded view
|

Re: Python Windows Service and registering for preshutdown?

Mark Hammond-4
On 7/02/2012 5:18 PM, Lincoln Yeoh wrote:
> Hi,
>
> Is it easy to create a python windows service that registers for the
> preshutdown event[1]?

It sounds like it should be easy, although you will need to define your
own new constants which have been introduced.  It would be great if you
do get it working you contribute a working sample which I can add to
pywin32.

Cheers,

Mark

>
> Basically I would like a window service that will help shutdown .Net
> (and possibly other) services in the right order.
>
> Because:
> http://connect.microsoft.com/VisualStudio/feedback/details/641737/add-windows-service-preshutdown
>
> "A Windows service in C# cannot be registered to preshutdown
> notifications. It is possible in C++ but not in C# with the current .net
> framework"
>
> http://support.microsoft.com/kb/203878
>
> "When a service is dependendent on other services, the Service Control
> Manager (SCM) will automatically start the dependencies before starting
> the dependent service itself. However, during system shutdown, the SCM
> does not take dependencies into consideration when stopping services. It
> simply enumerates the list of running services and sends a
> SERVICE_CONTROL_SHUTDOWN command to all of them. Thus, a service may
> stop responding or fail because another service it depends upon has
> already stopped."
>
> (yeah weird right?)
>
> And, since I'm a crappy and lazy programmer I think it'll be easier for
> me to write such a thing in Python than C++, reasonably quickly, with
> the features I want and with not too many bugs.
>
> Regards,
>
> Link.
>
> [1] http://msdn.microsoft.com/en-us/magazine/cc164252.aspx#S2
>
> _______________________________________________
> python-win32 mailing list
> [hidden email]
> http://mail.python.org/mailman/listinfo/python-win32

_______________________________________________
python-win32 mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/python-win32
Reply | Threaded
Open this post in threaded view
|

Re: Python Windows Service and registering for preshutdown?

Bill Tutt
You'd simply need to override GetAcceptedControls() in your ServiceFramework subclass to OR in SERVICE_ACCEPT_PRESHUTDOWN and override SvcOtherEx to process SERVICE_CONTROL_PRESHUTDOWN.

Other interesting service control notifications appear to be PowerEvent and TimeChange. I'd guess PowerEvent is for sleep/hibernation, and TimeChange is to deal with time jumping forward and backward on you. (via NTP or manual intervention)

Here are the constants to use:

#define SERVICE_CONTROL_PRESHUTDOWN            0x0000000F
#define SERVICE_ACCEPT_PRESHUTDOWN             0x00000100

Bill


On Tue, Feb 7, 2012 at 1:54 AM, Mark Hammond <[hidden email]> wrote:
On 7/02/2012 5:18 PM, Lincoln Yeoh wrote:
Hi,

Is it easy to create a python windows service that registers for the
preshutdown event[1]?

It sounds like it should be easy, although you will need to define your own new constants which have been introduced.  It would be great if you do get it working you contribute a working sample which I can add to pywin32.

Cheers,

Mark



Basically I would like a window service that will help shutdown .Net
(and possibly other) services in the right order.

Because:
http://connect.microsoft.com/VisualStudio/feedback/details/641737/add-windows-service-preshutdown

"A Windows service in C# cannot be registered to preshutdown
notifications. It is possible in C++ but not in C# with the current .net
framework"

http://support.microsoft.com/kb/203878

"When a service is dependendent on other services, the Service Control
Manager (SCM) will automatically start the dependencies before starting
the dependent service itself. However, during system shutdown, the SCM
does not take dependencies into consideration when stopping services. It
simply enumerates the list of running services and sends a
SERVICE_CONTROL_SHUTDOWN command to all of them. Thus, a service may
stop responding or fail because another service it depends upon has
already stopped."

(yeah weird right?)

And, since I'm a crappy and lazy programmer I think it'll be easier for
me to write such a thing in Python than C++, reasonably quickly, with
the features I want and with not too many bugs.

Regards,

Link.

[1] http://msdn.microsoft.com/en-us/magazine/cc164252.aspx#S2

_______________________________________________
python-win32 mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/python-win32

_______________________________________________
python-win32 mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/python-win32



_______________________________________________
python-win32 mailing list
[hidden email]
http://mail.python.org/mailman/listinfo/python-win32