#include <app2ext_interface.h>
#include <FIoDirectory.h>
+#include <FAppPkgPackageInfo.h>
+#include <FAppPkgPackageAppInfo.h>
#include <FIo_FileImpl.h>
#include <FBase_StringConverter.h>
#include <FAppPkg_PackageManagerImpl.h>
if (__pContext->__isHybridService == true)
{
AppLog("Uninstallation for HybridService");
- __state = STATE_DELETE_DIR;
+ __state = STATE_TERMINATE_APP;
return error;
}
}
delete pList;
- __state = STATE_DELETE_DIR;
+ __state = STATE_TERMINATE_APP;
return error;
}
UninstallStep::OnStateTerminateApp(void)
{
InstallerError error = INSTALLER_ERROR_NONE;
+ std::unique_ptr< PackageInfo > pPackageInfo(_PackageManagerImpl::GetInstance()->GetPackageInfoN(__pContext->__packageId));
+
+ _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo.get());
+ TryReturn(pPackageInfoImpl, INSTALLER_ERROR_INTERNAL_STATE, "GetInstance() failed.");
+
+ std::unique_ptr< IList > pPackageAppList(pPackageInfoImpl->GetPackageAppInfoListN());
+ TryReturn(pPackageAppList, INSTALLER_ERROR_INTERNAL_STATE, "GetPackageAppInfoListN() failed.");
+
+ for (int i = 0; i < pPackageAppList->GetCount(); i++)
+ {
+ PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(pPackageAppList->GetAt(i));
+ TryReturn(pPackageAppInfo, INSTALLER_ERROR_INTERNAL_STATE, "pPackageAppList->GetAt(%d) failed.", i);
+
+ AppId appId = pPackageAppInfo->GetAppId();
+ InstallerUtil::TerminateApp(appId);
+ }
GoNextState();
return error;
#include <FIoDirectory.h>
#include <FBase_StringConverter.h>
#include <FSecCryptoSha2Hash.h>
+#include <FApp_Aul.h>
#include "InstallerDefs.h"
#include "InstallerUtil.h"
return pMap.release();
}
+
+bool
+InstallerUtil::TerminateApp(const AppId& appId)
+{
+ bool res = true;
+
+ if (_Aul::IsRunning(appId) == true)
+ {
+ AppLog("App(%ls) is running.", appId.GetPointer());
+
+ result r = _Aul::TerminateApplication(appId);
+ TryReturn(r == E_SUCCESS, false, "TerminateApplication() failed. [%ls]", appId.GetPointer());
+
+ for (int j = 0; j < TERMINATE_RETRY_COUNT; j++)
+ {
+ res = _Aul::IsRunning(appId);
+ if (res == false)
+ {
+ AppLog("App(%ls) is terminated.", appId.GetPointer());
+ break;
+ }
+ else
+ {
+ AppLog("App(%ls) is not terminated yet. wait count = [%d]", appId.GetPointer(), j);
+ usleep(100000);
+ }
+ }
+
+ if (res == true)
+ {
+ AppLog("App(%ls) can't be terminated.", appId.GetPointer());
+ return false;
+ }
+ }
+ else
+ {
+ AppLog("App(%ls) is not running.", appId.GetPointer());
+ }
+
+ return true;
+}
+