Delphi怎么才能实现关闭那些服务类的进程呢?
如 瑞星等杀毒,我用Delphi怎么都实现不了,一般的QQ.exe或者其它一应用程序都可以,网上搜索了一下,应该是没有Debug权限的问题,哪位老师,有这类的源码嘛?
如 瑞星等杀毒,我用Delphi怎么都实现不了,一般的QQ.exe或者其它一应用程序都可以,网上搜索了一下,应该是没有Debug权限的问题,哪位老师,有这类的源码嘛?
解决方案 »
- 如何模仿可扩展或收缩的 IE
- 50分求解:用ADOQuery怎么条件查询rave报表中的内容?如在Edit输入年月日“2009/07/30”,就显示符合“2009/07/30”的所有内容。
- 请问用delphi编写dll时(代码如下),为什么调用时会错误,说是错误指针调用,请问如何更改程序才能实现正确调用
- 一个超级菜的问题,怎么给一个Array一次性赋值?
- 来者给分!两台机器同时录数据,编号为主健,并且自动产生,有可能产生重复!如何避免?
- 关于大数据量读取的问题!!
- 除法怎莫用(在线等待)
- combobox组件怎样自动选择自己指定的项???????
- cszhz(丑小鸭)请进
- 低手向高手请教,网络数据库如何实现?
- 如何调用外部程序,并等待其运行结束
- 线程的执行速度?
var
SvcStatus:SERVICE_STATUS;
dwStartTime,dwTimeout:DWORD;
schSCManager,schService:SC_HANDLE;
procedure CloseHandles;
begin
CloseServiceHandle(schService);
CloseServiceHandle(schSCManager);
end;
begin
Result:=False;
dwStartTime:=GetTickCount();
dwTimeout:=30000;
schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if 0=schSCManager then Exit;
schService:=OpenService(schSCManager,PAnsiChar(SvcName),SERVICE_STOP or SERVICE_QUERY_STATUS or SERVICE_ENUMERATE_DEPENDENTS);
if schService=0 then
begin
CloseServiceHandle(schSCManager);
Exit;
end;
if not QueryServiceStatus(schService,SvcStatus) then
begin
CloseHandles;
Exit;
end;
if SvcStatus.dwCurrentState=SERVICE_STOPPED then
begin
Result:=True;
CloseHandles;
Exit;
end;
while SvcStatus.dwCurrentState=SERVICE_STOP_PENDING do
begin
Sleep(SvcStatus.dwWaitHint );
if not QueryServiceStatus(schService,SvcStatus) then
begin
CloseHandles;
Exit;
end;
if SvcStatus.dwCurrentState=SERVICE_STOPPED then
begin
Result:=True;
CloseHandles;
Exit;
end;
if GetTickCount()-dwStartTime>dwTimeout then
begin
//Service stop timed out
CloseHandles;
Exit;
end;
StopDependentServices(schSCManager,schService);
if not ControlService(schService,SERVICE_CONTROL_STOP,SvcStatus) then
begin
//ControlService failed
CloseHandles;
Exit;
end;
while SvcStatus.dwCurrentState<>SERVICE_STOPPED do
begin
Sleep(SvcStatus.dwWaitHint);
if not QueryServiceStatus(schService,SvcStatus) then
begin
//QueryServiceStatusEx failed
CloseHandles;
Exit;
end;
if SvcStatus.dwCurrentState=SERVICE_STOPPED then Break;
if GetTickCount()-dwStartTime>dwTimeout then
begin
//Wait timed out
CloseHandles;
Exit;
end;
end;
Result:=True;
end;
end;