-result
-_AppControlManager::LaunchAppImplicit(_AppArg* pArg, int req)
-{
- SysTryReturnResult(NID_APP, pArg != null, E_INVALID_ARG, "Invalid launch argument");
-
- result r = E_SUCCESS;
- bundle* kb = pArg->GetBundle();
-
- if (req >= 0)
- {
- pArg->UpdateRequestId(req);
- _AppMessageImpl::AddData(kb, SELECTOR_NOTI_KEY, _AppInfo::GetApplicationId());
- }
-
- if (_AppImpl::GetInstance() != null)
- {
- const long handle = _AppImpl::GetInstance()->GetWindowHandle();
- _AppArg::UpdateWindowHandle(kb, handle);
- }
-
- int pid = appsvc_run_service(kb, req, LaunchResultCb, this);
- if (pid >= 0)
- {
- if (pid == 0)
- {
- SysLog(NID_APP, "Sending local process again.");
- pid = getpid();
- }
-
- char pkgname[255] = {0, };
- if (aul_app_get_pkgname_bypid(pid, pkgname, 255) != AUL_R_OK)
- {
- SysLog(NID_APP, "Fail to get package name by pid : (%d).", pid);
- return E_SYSTEM;
- }
-
- if (strncmp(pkgname, APP_SELECTOR, strlen(APP_SELECTOR)) != 0)
- {
- const char* pOperation = appsvc_get_operation(kb);
-
- SysLog(NID_APP, "Starting application without selector : (%s, %s).", pkgname, pOperation);
-
- SendAppControlStartResponse(req, pkgname, pOperation);
- }
- }
- else
- {
- switch (pid)
- {
- case APPSVC_RET_EINVAL:
- r = E_OBJ_NOT_FOUND;
- break;
- case APPSVC_RET_ENOMATCH:
- r = E_OBJ_NOT_FOUND;
- break;
- case APPSVC_RET_EILLACC:
- r = E_ILLEGAL_ACCESS;
- break;
- case APPSVC_RET_ERROR:
- // fall through
- case APPSVC_RET_ELAUNCH:
- // fall through
- default:
- r = E_SYSTEM;
- break;
- }
- }
-
- SysLog(NID_APP, "[%s] Application(%d) launched with reqId(%d) and arg(0x%x).", GetErrorMessage(r), pid, req, pArg);
-
- return r;
-}