项目中的实际问题:需要用一个服务程序来启动并监控另一个程序,而该程序中使用了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 = szExplorerPath;
if ( 0 == csProcessName.C

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





