用API获取windows服务的状态,以判断sqlserver是不是启动
用API获取windows服务的状态,以判断sqlserver是否启动
OpenSCManager在xp下正常返回句柄,但在2003server下返回0,怎么回事?
具体代码如下:
=====================
ulong lul_sch,lul_svc
string ls_database
S_SERVICE_STATUS lsss_1
if vs_machinename = '' then setnull(vs_machinename)
setnull(ls_database)
lul_sch = OpenSCManager(vs_machinename,ls_database,983103) //SC_MANAGER_ALL_ACCESS (0xF003F)=983103
if lul_sch > 0 then
lul_svc = OpenService(lul_sch,ref vs_servicename,4)
if lul_svc > 0 then
QueryServiceStatus(lul_svc,ref lsss_1)
return lsss_1.dwCurrentState
else
return -1
end if
else
return -1
end if
=====================
其中vs_machinename是服务器ip,vs_servicename是服务名
------解决方案--------------------
呵呵,我没有2003的环境测试,不过我用的连接SQLSERVER的SQLDMO对象来判断SQLSERVER的状态,你也可以试试,一直很稳定的~~
OLEObject loo_SQLServer
string ls_error
int li_ret,li_Status
//启动服务器,配置数据库
loo_SQLServer = CREATE OLEObject
li_ret = loo_SQLServer.ConnectToNewObject("SQLDMO.SQLServer")
if li_ret <> 0 then
ls_error = '未安装SQL Server服务器或SQL Server系统已经损坏!'
MessageBox('提示',ls_error,stopSign!)
return
end if
loo_SQLServer.name = as_server //as_server为服务器名;
try
li_Status = loo_SQLServer.Status
catch (runtimeerror aaa)
ls_error = '指定服务器无效,服务器名:' + as_server
end try
if len(ls_error)>0 then
MessageBox('提示',ls_error,stopSign!)
return
end if
if li_Status = 3 then//服务停止
elseif li_Status = 2 then//服务暂停
else
//服务器正常
end if
------解决方案--------------------
刚才在pb9,2003下测试过了。
声明外部函数
Function ulong OpenSCManagerA(ref string lpMachineName,ref string lpDatabaseName,ulong dwDesiredAccess)LIBRARY "Advapi32.dll"
测试代码:
ULONG A,B
string P
SetNull(P)
B = 983103
A = OpenSCManagerA(P,P,B)
messagebox("",string(A))
完全可以的。
OpenSCManager在xp下正常返回句柄,但在2003server下返回0,怎么回事?
具体代码如下:
=====================
ulong lul_sch,lul_svc
string ls_database
S_SERVICE_STATUS lsss_1
if vs_machinename = '' then setnull(vs_machinename)
setnull(ls_database)
lul_sch = OpenSCManager(vs_machinename,ls_database,983103) //SC_MANAGER_ALL_ACCESS (0xF003F)=983103
if lul_sch > 0 then
lul_svc = OpenService(lul_sch,ref vs_servicename,4)
if lul_svc > 0 then
QueryServiceStatus(lul_svc,ref lsss_1)
return lsss_1.dwCurrentState
else
return -1
end if
else
return -1
end if
=====================
其中vs_machinename是服务器ip,vs_servicename是服务名
------解决方案--------------------
呵呵,我没有2003的环境测试,不过我用的连接SQLSERVER的SQLDMO对象来判断SQLSERVER的状态,你也可以试试,一直很稳定的~~
OLEObject loo_SQLServer
string ls_error
int li_ret,li_Status
//启动服务器,配置数据库
loo_SQLServer = CREATE OLEObject
li_ret = loo_SQLServer.ConnectToNewObject("SQLDMO.SQLServer")
if li_ret <> 0 then
ls_error = '未安装SQL Server服务器或SQL Server系统已经损坏!'
MessageBox('提示',ls_error,stopSign!)
return
end if
loo_SQLServer.name = as_server //as_server为服务器名;
try
li_Status = loo_SQLServer.Status
catch (runtimeerror aaa)
ls_error = '指定服务器无效,服务器名:' + as_server
end try
if len(ls_error)>0 then
MessageBox('提示',ls_error,stopSign!)
return
end if
if li_Status = 3 then//服务停止
elseif li_Status = 2 then//服务暂停
else
//服务器正常
end if
------解决方案--------------------
刚才在pb9,2003下测试过了。
声明外部函数
Function ulong OpenSCManagerA(ref string lpMachineName,ref string lpDatabaseName,ulong dwDesiredAccess)LIBRARY "Advapi32.dll"
测试代码:
ULONG A,B
string P
SetNull(P)
B = 983103
A = OpenSCManagerA(P,P,B)
messagebox("",string(A))
完全可以的。