-
-
应用软件启动服务程序的权限问题?
-
发表于:
2014-12-9 20:31
8078
-
目的---------------在应用软件中判断服务有没有启动,没有启动的话就启动他。
/////////////////////////////启动服务//////////////////////////////////////////
void CheckStartService()
{
SC_HANDLE hSC=OpenSCManager(NULL,NULL,GENERIC_EXECUTE);
if(hSC==NULL)
{
return ;
}
//打开服务
SC_HANDLE hSvc=OpenService(hSC,L"李多海",SERVICE_START|SERVICE_QUERY_STATUS|SERVICE_STOP);
if(hSvc==NULL)
{
CloseServiceHandle(hSC);
}
//获取服务的状态
SERVICE_STATUS status;
if( ::QueryServiceStatus( hSvc, &status) == FALSE)
{
::CloseServiceHandle( hSvc);
::CloseServiceHandle( hSC);
return;
}
//如果处于停止状态则启动服务
if( status.dwCurrentState == SERVICE_STOPPED)
{
//启动服务
if(StartService(hSvc,NULL,NULL)==FALSE)
{
::CloseServiceHandle( hSvc);
::CloseServiceHandle( hSC);
return;
}
//等待服务启动
while( ::QueryServiceStatus( hSvc, &status) == TRUE)
{
::Sleep( status.dwWaitHint);
if( status.dwCurrentState == SERVICE_RUNNING)
{
::CloseServiceHandle( hSvc);
::CloseServiceHandle( hSC);
return;
}
}
}
::CloseServiceHandle( hSvc);
::CloseServiceHandle( hSC);
return;
}
测试用管理员权限运行我的EXE就能启动服务,调试发现问题1:
OpenSCManager需要访问权限
问题2
StartService必须在OpenService的时候加上SERVICE_START权限,加上这个OpenService就GetLastError=5了,请问各位漂亮的姐姐妹妹英俊的哥哥弟弟,叔叔阿姨们,面对前方的路,我该何去何从?
ps:倘若问题解决,女的小弟愿意以身相许,男的小弟愿意捐出处菊以示感谢。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!