请教各位大侠,怎样编程中止或启动Windows 2000中的某个服务,在这里谢谢大家了!(50分)

  • 主题发起人 主题发起人 fdwangchao
  • 开始时间 开始时间
F

fdwangchao

Unregistered / Unconfirmed
GUEST, unregistred user!
各位:
怎样在Windows 2000中止某个服务,比方说中止MSSQLSERVER这个服务。因为我每次备份
我的SQL数据库的时候,都要SQL SERVER 服务管理器中去停止SQL服务。这样我觉得很麻烦,
各位大侠们一定要帮帮小弟,万分感谢!
 
备份SQL数据库需要停止sql服务吗??不用把! 你就用设定好了的定时备份产生的文件就可以拉
,或则用backup功能也不用停止服务啊?
 
OpenSCManager
OpenService
ControlService
具体情查阅 Windows 帮助。
 
要备份数据库不须要停SQL服务,如果要一定要停,可以让SQL Server执行:
master..xp_servicecontrol 'STOP', 'MSSQLServer'
就可以停了,但是却起不来了,呵呵呵……[8D]
 
如果在服务器上执行,有个简单的办法,用winexec执行:
net stop MSSQLServer
就停了,再
net start MSSQLServer
就起了。
 
net start mssqlserver
net stop mssqlserver
 
我有源码,要吗?它不是用什么net命令!
 
这可是我研究了很久的一个主打函数,送给各位了:
// 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 genue:
谢谢你提供给我这么好的函数,但我在调试的时候出现了下面一些问题:能否给我解答,
谢谢!
[Error] Unit1.pas(33): Undeclared identifier: 'SC_HANDLE'
[Error] Unit1.pas(34): Undeclared identifier: 'TServiceStatus'
[Error] Unit1.pas(39): Undeclared identifier: 'OpenSCManager'
[Error] Unit1.pas(39): Undeclared identifier: 'SC_MANAGER_ENUMERATE_SERVICE'
[Warning] Unit1.pas(40): Comparing signed and unsigned types - widened both operands
[Error] Unit1.pas(45): Undeclared identifier: 'OpenService'
[Error] Unit1.pas(45): Undeclared identifier: 'SERVICE_ALL_ACCESS'
[Warning] Unit1.pas(46): Comparing signed and unsigned types - widened both operands
[Error] Unit1.pas(48): Undeclared identifier: 'CloseServiceHandle'
[Error] Unit1.pas(53): Undeclared identifier: 'QueryServiceStatus'
[Error] Unit1.pas(63): ')' expected but identifier 'dwCurrentState' found
[Error] Unit1.pas(66): ')' expected but identifier 'dwCurrentState' found
[Error] Unit1.pas(68): Undeclared identifier: 'Delay'
[Error] Unit1.pas(79): ')' expected but identifier 'dwCurrentState' found
[Error] Unit1.pas(82): ')' expected but identifier 'dwCurrentState' found
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
 
给你提最简单的提议,
1、 用net 命令
2、 打开d6 看看你的组件栏 有一个 com+的,那个东西就可以停止服务了。
 
同意楼上的!
其实用winexec('net stop/start XXX服务',0)语句是最简单的方法了
 
大家注意.我提供的函数需要加上头文件声明: uses WinSVC
把delay函数改成 sleep函数
 
谢谢genue,已经可以了,以后有问题希望你还多多帮忙!同时也谢谢其他的富翁们,谢谢!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部