首页
社区
课程
招聘
应用软件启动服务程序的权限问题?
发表于: 2014-12-9 20:31 8078

应用软件启动服务程序的权限问题?

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:倘若问题解决,女的小弟愿意以身相许,男的小弟愿意捐出处菊以示感谢。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 1443
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
OpenSCManager的第三个参数传SC_MANAGER_ALL_ACCESS。
2014-12-9 20:45
0
雪    币: 132
活跃值: (214)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
传SC_MANAGER_ALL_ACCESS,openscmanager的getlasterror=5,拒绝访问
2014-12-9 20:48
0
雪    币: 341
活跃值: (143)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
太暴力了。。。又是以身相许,又是捐出处菊的。。。。
2014-12-9 21:02
0
雪    币: 1443
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你应该是在session 0调用的这段代码吧?换成SC_MANAGER_CONNECT试试,忘了哪个了,记得在session 0确实不能申请all access,换一个就好了。
2014-12-9 21:42
0
雪    币: 209
活跃值: (143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不会是uac的问题吧,提权了没?
2014-12-10 09:26
0
雪    币: 132
活跃值: (214)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
7
怎么提?
2014-12-10 10:20
0
雪    币: 132
活跃值: (214)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
用SC_MANAGER_CONNECT的话OpenSCManager是可以,但是后面的OpenService就不行了
2014-12-10 10:21
0
雪    币: 5
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
提权不是链接器-清单文件-UAC执行级别-requireAdministrator吗?
不知道你们是不是讲这个
2014-12-11 15:43
0
雪    币: 7092
活跃值: (2988)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主后来怎么解决的啊,OpenSCManager用SC_MANAGER_CONNECT,OpenService 又失败的情况,
我现在是xp sp3下 非管理员组用户检查服务状态的也遇到这情况
2015-3-22 17:48
0
雪    币: 7092
活跃值: (2988)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
OpenService  用 SERVICE_QUERY_STATUS 可以了
2015-3-22 18:05
0
游客
登录 | 注册 方可回帖
返回
//