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