// W3SVC ---Web Service MSSQLSERVER --- MS SQL Service OverTime 为超时处理,单位秒 Function CtrlService(ServiceName: string; Status: Boolean; OverTime:Integer): Boolean; //控制WINDOWS的服务启动与停止 var lpServiceArgVectors: Pchar; hscmanager, hService: SC_HANDLE; returnstatus: TServiceStatus; i:Integer; begin Result := True; lpServiceArgVectors := nil; hscmanager := OpenSCManager(nil, nil, SC_MANAGER_ENUMERATE_SERVICE); // 打开service control manager database if hscmanager = 0 then begin Result := False; exit; end; hService := OpenService(hscmanager, Pchar(ServiceName), SERVICE_ALL_ACCESS); //打开W3SVC服务 if hService = 0 then begin CloseServiceHandle(hscmanager); CloseServiceHandle(hService); Result := False; exit; end; if not QueryServiceStatus(hService, returnstatus) then begin CloseServiceHandle(hscmanager); CloseServiceHandle(hService); Result := False; exit; end; //查看该Service的状态 i:=0; if Status then //如果是启动服务 begin if (returnstatus.dwCurrentState = SERVICE_STOPPED) and (not StartService(hService, 0, lpServiceArgVectors)) then Result := False else while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_RUNNING) do begin Sleep(1000); QueryServiceStatus(hService, returnstatus); Application.ProcessMessages; inc(i); end; CloseServiceHandle(hscmanager); CloseServiceHandle(hService); exit; end else //如果是停止服务 begin if (returnstatus.dwCurrentState = SERVICE_RUNNING) and (not ControlService(hService, SERVICE_CONTROL_STOP, returnstatus)) then Result := False else while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_STOPPED) do begin Sleep(1000); QueryServiceStatus(hService, returnstatus); Application.ProcessMessages; inc(i); end; CloseServiceHandle(hscmanager); CloseServiceHandle(hService); exit; end; end;
// W3SVC ---Web Service MSSQLSERVER --- MS SQL Service OverTime 为超时处理,单位秒 Function CtrlService(ServiceName: string; Status: Boolean; OverTime:Integer): Boolean; //控制WINDOWS的服务启动与停止 var lpServiceArgVectors: Pchar; hscmanager, hService: SC_HANDLE; returnstatus: TServiceStatus; i:Integer; begin Result := True; lpServiceArgVectors := nil; hscmanager := OpenSCManager(nil, nil, SC_MANAGER_ENUMERATE_SERVICE); // 打开service control manager database if hscmanager = 0 then begin Result := False; exit; end; hService := OpenService(hscmanager, Pchar(ServiceName), SERVICE_ALL_ACCESS); //打开W3SVC服务 if hService = 0 then begin CloseServiceHandle(hscmanager); CloseServiceHandle(hService); Result := False; exit; end; if not QueryServiceStatus(hService, returnstatus) then begin CloseServiceHandle(hscmanager); CloseServiceHandle(hService); Result := False; exit; end; //查看该Service的状态 i:=0; if Status then //如果是启动服务 begin if (returnstatus.dwCurrentState = SERVICE_STOPPED) and (not StartService(hService, 0, lpServiceArgVectors)) then Result := False else while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_RUNNING) do begin Sleep(1000); QueryServiceStatus(hService, returnstatus); Application.ProcessMessages; inc(i); end; CloseServiceHandle(hscmanager); CloseServiceHandle(hService); exit; end else //如果是停止服务 begin if (returnstatus.dwCurrentState = SERVICE_RUNNING) and (not ControlService(hService, SERVICE_CONTROL_STOP, returnstatus)) then Result := False else while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_STOPPED) do begin Sleep(1000); QueryServiceStatus(hService, returnstatus); Application.ProcessMessages; inc(i); end; CloseServiceHandle(hscmanager); CloseServiceHandle(hService); exit; end; end;
To: hr168(Ocb.Hr) 如果你不懂的话就闭上你的嘴好好学习学习,别自作聪明了好不好!用我下面的程序去调用上面的函索看看对不对!!!!!(delphi7.0+sql2000); var bool:boolean; begin bool:=CtrlService('MSSQLSERVER',false,10000); if bool=false then showmessage('false') else showmessage('true'); end;
某人了不起? ------------------------------------ 《CSDN论坛新助手 CSDN's forum Explorer》 1、更快速的浏览 2、更方便地保存 3、更快捷的接收短信 下载地址:http://www.seeyou.com.cn/CoolSlob/CSDNExplorer.exe
Function CtrlService(ServiceName: string; Status: Boolean; OverTime:Integer): Boolean; //控制WINDOWS的服务启动与停止
var
lpServiceArgVectors: Pchar;
hscmanager, hService: SC_HANDLE;
returnstatus: TServiceStatus;
i:Integer;
begin
Result := True;
lpServiceArgVectors := nil;
hscmanager := OpenSCManager(nil, nil, SC_MANAGER_ENUMERATE_SERVICE); // 打开service control manager database
if hscmanager = 0 then begin Result := False; exit; end;
hService := OpenService(hscmanager, Pchar(ServiceName), SERVICE_ALL_ACCESS); //打开W3SVC服务
if hService = 0 then
begin
CloseServiceHandle(hscmanager);
CloseServiceHandle(hService);
Result := False;
exit;
end;
if not QueryServiceStatus(hService, returnstatus) then
begin
CloseServiceHandle(hscmanager);
CloseServiceHandle(hService);
Result := False;
exit;
end; //查看该Service的状态
i:=0;
if Status then //如果是启动服务
begin
if (returnstatus.dwCurrentState = SERVICE_STOPPED) and (not StartService(hService, 0, lpServiceArgVectors)) then
Result := False
else
while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_RUNNING) do
begin
Sleep(1000);
QueryServiceStatus(hService, returnstatus);
Application.ProcessMessages;
inc(i);
end;
CloseServiceHandle(hscmanager);
CloseServiceHandle(hService);
exit;
end
else //如果是停止服务
begin
if (returnstatus.dwCurrentState = SERVICE_RUNNING) and (not ControlService(hService, SERVICE_CONTROL_STOP, returnstatus)) then
Result := False
else
while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_STOPPED) do
begin
Sleep(1000);
QueryServiceStatus(hService, returnstatus);
Application.ProcessMessages;
inc(i);
end;
CloseServiceHandle(hscmanager);
CloseServiceHandle(hService);
exit;
end;
end;
Function CtrlService(ServiceName: string; Status: Boolean; OverTime:Integer): Boolean; //控制WINDOWS的服务启动与停止
var
lpServiceArgVectors: Pchar;
hscmanager, hService: SC_HANDLE;
returnstatus: TServiceStatus;
i:Integer;
begin
Result := True;
lpServiceArgVectors := nil;
hscmanager := OpenSCManager(nil, nil, SC_MANAGER_ENUMERATE_SERVICE); // 打开service control manager database
if hscmanager = 0 then begin Result := False; exit; end;
hService := OpenService(hscmanager, Pchar(ServiceName), SERVICE_ALL_ACCESS); //打开W3SVC服务
if hService = 0 then
begin
CloseServiceHandle(hscmanager);
CloseServiceHandle(hService);
Result := False;
exit;
end;
if not QueryServiceStatus(hService, returnstatus) then
begin
CloseServiceHandle(hscmanager);
CloseServiceHandle(hService);
Result := False;
exit;
end; //查看该Service的状态
i:=0;
if Status then //如果是启动服务
begin
if (returnstatus.dwCurrentState = SERVICE_STOPPED) and (not StartService(hService, 0, lpServiceArgVectors)) then
Result := False
else
while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_RUNNING) do
begin
Sleep(1000);
QueryServiceStatus(hService, returnstatus);
Application.ProcessMessages;
inc(i);
end;
CloseServiceHandle(hscmanager);
CloseServiceHandle(hService);
exit;
end
else //如果是停止服务
begin
if (returnstatus.dwCurrentState = SERVICE_RUNNING) and (not ControlService(hService, SERVICE_CONTROL_STOP, returnstatus)) then
Result := False
else
while (i<OverTime) and (returnstatus.dwCurrentState <> SERVICE_STOPPED) do
begin
Sleep(1000);
QueryServiceStatus(hService, returnstatus);
Application.ProcessMessages;
inc(i);
end;
CloseServiceHandle(hscmanager);
CloseServiceHandle(hService);
exit;
end;
end;
把delay函数改成 sleep函数
我想楼主的意思是想对数据库进行还原吧,这个时候如果有人在使用该数据库的话你是不能还原的,所以楼主想把SQL服务关掉,对吗
如果我猜的对的话,其实解决方法不必这么麻烦,SQL可以直接关掉连接的线程,只供你一个人进行访问,这个时候你可以进行还原操作了,具体要写个存储过程,很方便,我现在没有,你可以到网上搜索一下
楼主你是要通过程序还是永远不用
还是说先关掉了重起了还可以在用
如果说纯粹是关掉SQL那就直接关掉SQL服务
如果你不懂的话就闭上你的嘴好好学习学习,别自作聪明了好不好!用我下面的程序去调用上面的函索看看对不对!!!!!(delphi7.0+sql2000);
var
bool:boolean;
begin
bool:=CtrlService('MSSQLSERVER',false,10000);
if bool=false then
showmessage('false')
else
showmessage('true');
end;
------------------------------------ 《CSDN论坛新助手 CSDN's forum Explorer》
1、更快速的浏览
2、更方便地保存
3、更快捷的接收短信
下载地址:http://www.seeyou.com.cn/CoolSlob/CSDNExplorer.exe
C:\PROGRA~1\MICROS~3\MSSQL\binn\sqlservr.exe