It is possible to prevent a system shutdown from within your C# apps. Basically the premise is as follows:
Override the WndProc event so that when a system shutdown event gets fired onto your app, block it with a messagebox saying: 'Hey! I'm still working over here!'
The code is as follows:
private const int WM_QUERYENDSESSION=0x0011;
private bool isShuttingDown=false;
protected override void WndProc(ref Message m)
{
if(m.Msg==WM_QUERYENDSESSION)
{
isShuttingDown=true;
}
base.WndProc(ref m);
}
private void frmLogin_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if(isShuttingDown)
{
if(MessageBox.Show(this,"The application is still running, are you sure you want to exit?",
"Confirm Closing by Windows Shutdown",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==System.Windows.Forms.DialogResult.Yes)
{
e.Cancel=false;
}
else
e.Cancel=true;
}
}
The code identifies the 'shutdown'(Query End Session ) event and isolates it so that it can be blocked