carceri
asked on
Prevent shutdown of program
How can I prevent people from shutting down one of my programs. The program must run in the background, I can set the CanClose to false, but when you press Ctrl-Alt-Delete and choose end task, the program comes with the not responding message after a while, and then you can choose to shut it down
On NT you could run your app as a service. The service process cannot be killed in task manager, only on the command line with kill (included in the NT ResKit) or in the service control manager. For both of that, you need administrative privilegues.
Slash/d003303
Slash/d003303
carceri
the other option is to disable ctrl + alt + del and ctrl + tab totally while you app is running, that way until you kill your app no one can get to the end task etc.(unless they run taskman from start/run)
If you want the code let me know
Later
BoRiS
the other option is to disable ctrl + alt + del and ctrl + tab totally while you app is running, that way until you kill your app no one can get to the end task etc.(unless they run taskman from start/run)
If you want the code let me know
Later
BoRiS
if the program runs everytimes in the background, you could start
to instances of it, and every instance checks if the other is still running and restart it when needed.
(very strange, i know)
regards
to instances of it, and every instance checks if the other is still running and restart it when needed.
(very strange, i know)
regards
Hi all
rene100's solution is a reasonable solution under Win 95. Another method (which I have used) needs only one instance of the exe, instead of rene100's 2 instanced which check each other.
(gnom: if you hide your app from the taskbar, it still shows up in the Task Manager.)
I have noticed that when you Ctrl-Alt-Del & End Task, the tasks main window gets a WM_DESTROY, but NOT a WM_CLOSE. (Normally the app gets a WM_CLOSE and then a WM_DESTROY. But when you select End Task the WM_CLOSE doesn't arive.)
Thus, you can check in the WM_DESTROY if a WM_CLOSE has been called. If not, then re-run the app. (It's also not elegant, because the app has to be restarted...)
E.g. Declare a form variable called IsClosing, and check this variable in WM_DESTROY. (You also need to override the WndProc for the form.)
procedure TMyForm.WndProc(var Message: TMessage);
begin
case Message.Msg of
WM_DESTROY:
if (not IsClosing) then
WinExec(PChar(ParamStr(0)) , SW_SHOWNORMAL);
WM_CLOSE:
IsClosing := True;
WM_QUERYENDSESSION:
begin
IsClosing := True;
Close;
end;
end;
inherited WndProc(Message);
end;
Cheers,
JB
rene100's solution is a reasonable solution under Win 95. Another method (which I have used) needs only one instance of the exe, instead of rene100's 2 instanced which check each other.
(gnom: if you hide your app from the taskbar, it still shows up in the Task Manager.)
I have noticed that when you Ctrl-Alt-Del & End Task, the tasks main window gets a WM_DESTROY, but NOT a WM_CLOSE. (Normally the app gets a WM_CLOSE and then a WM_DESTROY. But when you select End Task the WM_CLOSE doesn't arive.)
Thus, you can check in the WM_DESTROY if a WM_CLOSE has been called. If not, then re-run the app. (It's also not elegant, because the app has to be restarted...)
E.g. Declare a form variable called IsClosing, and check this variable in WM_DESTROY. (You also need to override the WndProc for the form.)
procedure TMyForm.WndProc(var Message: TMessage);
begin
case Message.Msg of
WM_DESTROY:
if (not IsClosing) then
WinExec(PChar(ParamStr(0))
WM_CLOSE:
IsClosing := True;
WM_QUERYENDSESSION:
begin
IsClosing := True;
Close;
end;
end;
inherited WndProc(Message);
end;
Cheers,
JB
The best way to do this would be to hide the program from the task list. (so that the user cannot "End Task" from the task list.)
This can be done for Win95, by making your program a "simple service". i can let you know the details if you like. (This DOESN'T work on NT though)
This can be done for Win95, by making your program a "simple service". i can let you know the details if you like. (This DOESN'T work on NT though)
ASKER
Yes, please !
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks, that's just what I need !
why do you need that ?
in WindowsNT there is no way to prevent people from shutting down any process.
and i think this is very good because if a process hangs you can shut it down, no matter what kind of process.
maybe it's enough do hide your program from the taskbar so the average user does not know how to shut down your program.... ?
dejan