急。请问怎样通过程序来控制win2k下的服务的启动和关闭。
解决方案 »
- 有人知道报Some internal limit (see context).是什么原因吗
- 关于进程的问题(急)
- Web Service是WAD的,TADOConnection连接数据库问题
- 急:combobox 怎样删除选中的项目
- 图像放大缩小的问题
- 如何判断一个字符是否为数字,请高手指教,急!!
- 新手求教怎样动态添加TButton?
- 关于BDE的问题
- 在DELPHI中实现把查询到的结果(不确定行和列)存入到STRINGGRId控件中
- [TIPS]Win9x和WinNT/2000下面都可以去掉OICQ广告的方法!
- 高分求解小问题(BDE问题)
- 关闭主程序后,子程序的托盘图标还在,需鼠标移向图标才令图标消失,请教解决办法?
1、取得服务数据库的handle
2、根据服务数据库的handle取得服务的handle
3、根据服务的handle来取服务的状态或者控制服务
这是一个控制sqlserver服务启动关闭的例子
uses winsvcprocedure TForm1.Button1Click(Sender: TObject);
var
hscmanager,hService:SC_HANDLE;
lpServiceArgVectors:Pchar;
returnstatus:TServiceStatus;
begin
lpServiceArgVectors:=nil;
hscmanager:=OpenSCManager(nil,nil,SC_MANAGER_ENUMERATE_SERVICE);// 打开service control manager database
hService:=OpenService(hscmanager,'MSSQLSERVER',SERVICE_ALL_ACCESS); case hService of
ERROR_ACCESS_DENIED: Memo1.Lines.Add('The specified service control manager database handle does not have access to the service.');
ERROR_INVALID_HANDLE: Memo1.Lines.Add('The specified handle is invalid.');
ERROR_INVALID_NAME: Memo1.Lines.Add('The specified service name is invalid.');
ERROR_SERVICE_DOES_NOT_EXIST: Memo1.Lines.Add('The specified service does not exist.');
end; QueryServiceStatus(hService,returnstatus); //查看该Service的状态
case returnstatus.dwCurrentState of
SERVICE_STOPPED: Memo1.Lines.Add('The service is not running.');
SERVICE_START_PENDING: Memo1.Lines.Add('The service is starting.');
SERVICE_STOP_PENDING: Memo1.Lines.Add('The service is stopping.');
SERVICE_RUNNING: memo1.lines.add('The service is running.');
SERVICE_CONTINUE_PENDING: Memo1.Lines.Add('The service continue is pending.');
SERVICE_PAUSE_PENDING: Memo1.Lines.Add('The service pause is pending.');
SERVICE_PAUSED: Memo1.Lines.Add('The service is paused');
end;
if returnstatus.dwCurrentState=SERVICE_STOPPED then //如果该Service已停止则启动它
StartService(hService,0,lpServiceArgVectors); if returnstatus.dwCurrentState=SERVICE_RUNNING then
ControlService(hService,SERVICE_CONTROL_STOP,returnstatus); //停止
CloseServiceHandle(hService);//关闭该Serviceend;