关于WINDOWS2000服务的问题 (50分)

S

Sun_

Unregistered / Unconfirmed
GUEST, unregistred user!
如下面的程序,我想打开"Rising Realtime Monitor Service"服务,但经调试,
在OpenService时失败。请大家帮帮忙,程序应如何修正?
//////////////////////////////////////////////////////////////////////
//file: WinService.H
#include<WINDOWS.H>
//class CWinService
class CWinService
{
private:
LPCTSTR lpServiceName;
public:
CWinService(LPCTSTR lpServiceName);
BOOL Start(void)const;
};
//initialize ServiceName
CWinService::CWinService(LPCTSTR ServiceName):lpServiceName(ServiceName)
{
}
//start the service
BOOL CWinService::Start(void)const
{
BOOL ret=false;
LPCTSTR* lpSAV;
SC_HANDLE hSC;
SC_HANDLE hSCM=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(hSCM!=NULL)
{
hSC=OpenService(hSCM,lpServiceName,SERVICE_START);
if(hSC!=NULL)
ret=StartService(hSC,0,lpSAV);
CloseServiceHandle(hSC);
}
CloseServiceHandle(hSCM);
return ret;
}
//////////////////////////////////////////////////////////////////////
//file: test.cpp
#include"WinService.h"
void main(void)
{
//"Rising Realtime Monitor Service"是我想启动的服务名
CWinService RavService("Rising Realtime Monitor Service");
RavService.Start();
}
 
不会吗?!
一直用也没有这个问题
 
OpenService的权限要求也改成SERVICE_ALL_ACCESS看看,你原来的或许还不够,谁知道他还要不要查询一下什么的
 
SERVICE_ALL_ACCESS之前我试过了,一样不行
 
注意 lpSAV 未初始化的时候,值时不确定的。你应该使用:
StartService(hSC,0,NULL);
另外你可以检查
ret=StartService(hSC,0,NULL);
if(!ret)
MessageBox(0,SysErrorMessage(GetLastError()).c_Str(),0,0)
 
失礼了,我居然把服务的“显示名称”当了“服务名称”^___^
 
顶部