服务程序中以管理员权限启动其它程序

在服务程序中启动一个需要管理员权限的程序时遇到问题,导致地图API无法加载。通过分析和实验,发现启动权限可能是关键。采用msdn上的CreateEnvironmentBlock函数,成功地以管理员权限创建进程,解决了程序正常运行的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


       项目中的实际问题:需要用一个服务程序来启动并监控另一个程序,而该程序中使用了JavaScript,并且访问百度的地图API,启动该程序后,发现地图总是无法加载,   这个问题纠结了我和外部程序的开发者三天时间了,一直没有头绪,今天写了一个最简单的百度地图的加载代码,结果弹出如下提示框

       

       但是当我自己按照普通的方式直接运行这个外部程序的时候,却能够正常加载,因此推断问题可能出现在启动权限上。

 

       检查代码,我的实现代码如下:

      

DWORD INTER_GetExplorerToken(OUT PHANDLE  phExplorerToken )   

{ 
	DWORD       dwStatus = ERROR_FILE_NOT_FOUND ;   
	BOOL        bRet = FALSE ;  
	HANDLE      hProcess = NULL ;  
	HANDLE      hProcessSnap = NULL ;  
	wchar_t        szExplorerPath[MAX_PATH] = { 0 } ;  
	wchar_t        FileName[MAX_PATH] = { 0 } ;  

	PROCESSENTRY32 pe32 = { 0 } ;  

	GetWindowsDirectory( szExplorerPath , MAX_PATH ) ;
	StrCatW( szExplorerPath , L"\\Explorer.EXE" ) ;   
	hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS , 0 ) ;  
	if( hProcessSnap == INVALID_HANDLE_VALUE )    
	{  
		dwStatus = GetLastError() ; 
		return 0;
	}   
	pe32.dwSize = sizeof( PROCESSENTRY32 ) ;   
	if( !Process32First( hProcessSnap, &pe32 ))  
	{     
		dwStatus = GetLastError() ;   
		return 0;
	}   

	do {  
		hProcess = OpenProcess(  
			PROCESS_ALL_ACCESS ,  
			FALSE ,  
			pe32.th32ProcessID ) ;  

		if( NULL != hProcess )   
		{   

			TCHAR szAppLocation[MAX_PATH] = _T("");
			DWORD dwRet = ::GetModuleFileNameEx( hProcess, NULL, 
				szAppLocation, MAX_PATH );
			if ( 0 == dwRet )
			{
				::Process32Next( hProcessSnap, &pe32 );					
				CloseHandle( hProcess );
				continue;
			}

			TCHAR szProcessName[MAX_PATH] = _T("");
			dwRet = ::GetLongPathName( szAppLocation, szProcessName, 
				MAX_PATH );
			if ( 0 == dwRet )
			{
				::Process32Next( hProcessSnap, &pe32 );
				CloseHandle( hProcess );
				continue;
			}
			CString csProcessName = szProcessName;
			CString csExplorerPath = szE
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值