Browse Source

Z991239-5406 #comment 统一应用、系统重启的调用,统一走框架接口

oilyang 1 year ago
parent
commit
8589da9d94

+ 16 - 173
Module/mod_healthmanager/mod_healthmanager.cpp

@@ -200,140 +200,6 @@ N:
 U:
 */
 
-
-int CHealthManagerEntity::SystemRestart(bool bPeriod, bool bNow)
-{
-	if (bPeriod)
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("restart periodly.");
-	if (bNow)
-	{
-		m_fsm.QuitFrameworkAndSaveInfo(m_eRebootTrigger, m_eRebootWay);
-		int x = SystemShutdown(TRUE);
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("From browser to shutdown %d", x);
-		return 0;
-	}
-
-	m_fsm.QuitFrameworkAndSaveInfo(m_eRebootTrigger, RebootWay_OS);
-	return 0;
-}
-/** 这里建议改用调用框架提供的接口,关机、重启均支持 [Gifur@202135]*/
-//system api shutdown
-int CHealthManagerEntity::SystemShutdown(BOOL bReboot)
-{
-#ifdef RVC_OS_WIN
-	HANDLE hToken;              // handle to process token 
-	TOKEN_PRIVILEGES tkp;       // pointer to token structure 
-
-	BOOL fResult;               // system shutdown flag 
-
-	// Get the current process token handle so we can get shutdown 
-	// privilege. 
-
-	if (!OpenProcessToken(GetCurrentProcess(), 
-		TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
-		return FALSE; 
-
-	// Get the LUID for shutdown privilege. 
-
-	LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, 
-		&tkp.Privileges[0].Luid); 
-
-	tkp.PrivilegeCount = 1;  // one privilege to set    
-	tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
-
-	// Get shutdown privilege for this process. 
-
-	AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, 
-		(PTOKEN_PRIVILEGES) NULL, 0); 
-
-	// Cannot test the return value of AdjustTokenPrivileges. 
-
-	if (GetLastError() != ERROR_SUCCESS) 
-		return FALSE; 
-
-	// Display the shutdown dialog box and start the countdown. 
-
-	fResult = InitiateSystemShutdown( 
-		NULL,    // shut down local computer 
-		NULL,   // message for user
-		0,      // time-out period, in seconds 
-		FALSE,   // ask user to close apps 
-		bReboot);   // reboot after shutdown 
-
-	if (!fResult) 
-		return FALSE; 
-
-	// Disable shutdown privilege. 
-
-	tkp.Privileges[0].Attributes = 0; 
-	AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, 
-		(PTOKEN_PRIVILEGES) NULL, 0); 
-	return 0;
-#else
-	sync();
-	if (bReboot)
-		system("init 6");
-	else
-		system("init 0");
-	return 0;//oiltestlinux
-#endif //RVC_OS_WIN
-}
-
-int CHealthManagerEntity::FrameworkShutdown(bool bRestart)
-{
-#if defined(RVC_OS_WIN)
-	//oilyang@20211213 if reboot Framework,just call "pFuncPrivilege->Reboot";if shutdown only,call sprestart
-	if (bRestart)
-	{
-		m_fsm.QuitFrameworkAndSaveInfo(m_eRebootTrigger, m_eRebootWay);
-		return 0;
-	}
-    STARTUPINFO si;
-    PROCESS_INFORMATION pi;
-
-    ZeroMemory( &si, sizeof(si) );
-    si.cb = sizeof(si);
-    ZeroMemory( &pi, sizeof(pi) );
-	GetFunction()->FlushLogFile();
-
-	//	LPTSTR szCmdline[] = _tcsdup(TEXT("\"C:\\Program Files\\MyApp\" -L -S"));
-	//CreateProcess(NULL, szCmdline, /*...*/);
-
-    // Start the child process.
-	CSimpleStringA csRestart,csVerPath,csAll,csSep("\""),csBlank(" "),csScript("wscript.exe"),csReFlag("r");
-	csRestart = "sprestart.exe ";
-	ErrorCodeEnum Error = GetFunction()->GetPath("RootVer", csVerPath);
-	//csVerPath +="\\spexplorerfast.vbs";
-	csVerPath +="\\VTM.exe";
-	if (!bRestart)
-		csReFlag = "n";
-	//csAll = csSep + csRestart + csSep + csBlank + csSep + csScript+csBlank + csVerPath + csSep 
-	//	+ csBlank + csSep + csReFlag + csSep;
-	csAll = csSep + csRestart + csSep + csBlank + csSep + csVerPath + csSep 
-		+ csBlank + csSep + csReFlag + csSep;
-	DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("allpath[%s]",(LPCTSTR)csAll);
-	LPTSTR szCmdline = _strdup(csAll);
-    if( !CreateProcess( NULL,szCmdline,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) 
-    {
-		DbgWithLink(LOG_LEVEL_ERROR,LOG_TYPE_SYSTEM)("CreateProcess failed (%d).\n", GetLastError());
-        return -1;
-    }
-	//MessageBoxA(0,0,0,0);
-	DWORD dwErr = GetLastError();
-	// Wait until child process exits.
-    WaitForSingleObject( pi.hProcess, INFINITE );
-	
-	
-    // Close process and thread handles. 
-    CloseHandle( pi.hProcess );
-    CloseHandle( pi.hThread );
-	return 0;
-#else
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("FrameworkShutdown to call QuitFrameworkAndSaveInfo:%d,%d", m_eRebootTrigger, m_eRebootWay);
-	m_fsm.QuitFrameworkAndSaveInfo(m_eRebootTrigger, m_eRebootWay);
-	return 0;//oiltestlinux
-#endif
-}
 //almost disused.
 
 ErrorCodeEnum CHealthManagerEntity::RestartModule(const char* pEntityName)
@@ -402,9 +268,7 @@ void CHealthManagerEntity::AfterWaitRestartPC()
 		m_bWaitRestartPC = false;
 		pFuncPrivilege->DisplayBlueScreen("PAUSE SERVICE");
 		DbgWithLink(LOG_LEVEL_INFO,LOG_TYPE_SYSTEM)("time comes,restart machine");
-		m_eRebootTrigger = RebootTrigger_RunExcepition;
-		m_eRebootWay = RebootWay_Power;
-		SystemRestart(false);
+		m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_RunExcepition, RebootWay_OS);
 	}
 }
 void CHealthManagerEntity::OnCheckTimeTimeout()
@@ -421,9 +285,7 @@ void CHealthManagerEntity::OnCheckTimeTimeout()
 		if (m_bInMainPage || csTermStage.Compare("A"))
 		{
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("THE key CenterSetting updated,we must restart framework right now.");
-			m_eRebootTrigger = RebootTrigger_Resource;
-			m_eRebootWay = RebootWay_Framework;
-			FrameworkShutdown();
+			m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_Resource, RebootWay_Framework);
 		}
 	}
 
@@ -432,10 +294,8 @@ void CHealthManagerEntity::OnCheckTimeTimeout()
 	if (m_OSRunTicks > (m_restartHour * 60 * 60 * 1000 + m_restartMinute * 60 * 1000)
 		&& m_OSRunTicks < (m_restartHour * 60 * 60 * 1000 + (m_restartMinute + HEALTHMANAGER_REBOOT_OS_IN_MINUTES_AFTER_TIME) * 60 * 1000))
 	{
-		m_eRebootTrigger = RebootTrigger_Period;
-		m_eRebootWay = RebootWay_Power;
-		BOOL bRet = SystemRestart(true);
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM).setAPI("OnCheckTimeTimeout")("restart machine bRet=%d, LastError=%d", bRet, GetLastError());
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to restart machine daily");
+		m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_Period, RebootWay_OS);
 	}
 
 	ErrorCodeEnum eErr = Error_Unexpect;
@@ -1256,7 +1116,8 @@ void CHealthManagerEntity::OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nL
 		{
 			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("version rollback succeed.to restart framework");
 			m_bVerRollback = false;
-			m_eRebootTrigger = RebootTrigger_RollBack;
+			m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_RollBack, RebootWay_Framework);
+			break;
 		}
 		else if (dwUserCode == Event_Req_Framework_No_Upgrade_Restart)
 		{
@@ -1265,16 +1126,7 @@ void CHealthManagerEntity::OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nL
 			GetFunction()->PostThreadPoolTask(task);
 			break;
 		}
-		m_eRebootWay = RebootWay_Framework;
-		BOOL bRet = FrameworkShutdown();
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("framework shutdown [%d]", bRet);
-	}
-	break;
-	case EVENT_CONSOLE_REQ_SHUTDOWN_SHELL:
-	{
-		LogWarn(Severity_Low, Error_Unexpect, HealthManager_UserErrorCode_PrivilegeCMD, CSimpleStringA::Format("%x", dwUserCode));
-		BOOL bRet = FrameworkShutdown(false);
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("framework shutdown from console [%d]", bRet);
+		m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_Unknown, RebootWay_Framework);
 	}
 	break;
 	case EVENT_RESTART_MACHINE:
@@ -1282,34 +1134,29 @@ void CHealthManagerEntity::OnLog(const CAutoArray<CUUID>& SubIDs, const CUUID nL
 	case EVENT_CONSOLE_REQ_RESTART_POWER:
 	{
 		LogWarn(Severity_Low, Error_Unexpect, HealthManager_UserErrorCode_PrivilegeCMD, CSimpleStringA::Format("%x", dwUserCode));
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("restart [%x]", dwUserCode);
 		if (dwUserCode == Event_Req_OS_Restart)
-			m_eRebootTrigger = RebootTrigger_OSUpgrade;
+			m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_OSUpgrade, RebootWay_OS);
 		else
-			m_eRebootTrigger = RebootTrigger_Unknown;
-		m_eRebootWay = RebootWay_Power;
-		BOOL bRet = SystemRestart(false);
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("os restart [%d]", bRet);
+			m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_Unknown, RebootWay_OS);	
 	}
 	break;
 	case LOG_EVT_IEBROWSER_RESTART_MACHINE:
 	{
-		m_eRebootTrigger = RebootTrigger_Unknown;
-		m_eRebootWay = RebootWay_Power;
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("machine restart now [%x]", dwUserCode);
 		LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_IEBROWSER_RESTART_MACHINE, "ClosePage/UserDeskTop to call restart machine.");
-		BOOL bRet = SystemRestart(false, true);
-		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("machine restart now [%d]", bRet);
+		m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_Unknown, RebootWay_OS);
 		break;
 	}
 	case LOG_EVT_IEBROWSER_SHUTDOWN_MACHINE:
 	{
+		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("ClosePage/UserDeskTop to call shutdown machine. [%x]", dwUserCode);
 		LogWarn(Severity_Low, Error_Unexpect, LOG_EVT_IEBROWSER_SHUTDOWN_MACHINE, "ClosePage/UserDeskTop to call shutdown machine.");
-		SystemShutdown();
+		m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_DeadForever, RebootWay_OS);
 		break;
 	}
 	case EVENT_MOD_SIP_RESART:
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("SIPPhone said to wait chance to restart(power) pc.");
-		m_eRebootTrigger = RebootTrigger_RunExcepition;
-		m_eRebootWay = RebootWay_Power;
 		m_bWaitRestartPC = true;
 		break;
 	case EVENT_ACCESSAUTH_SUCCEED:
@@ -1563,12 +1410,8 @@ void CHealthManagerEntity::WarnAndRestartFramwork()
 		//Dbg("to tell guardian framework is restarting.%d",eErr);
 		DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("to tell guardian framework is restarting.%d", eErr);
 	}
-	m_eRebootTrigger = RebootTrigger_FrameUpgrade;
-
-	m_eRebootWay = RebootWay_Framework;
-	BOOL bRet = FrameworkShutdown();
-	//Dbg("framework shutdown [%d]", bRet);
-	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("framework shutdown in restart task [%d]", bRet);
+	DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("framework shutdown in restart task");
+	m_fsm.QuitFrameworkAndSaveInfo(RebootTrigger_FrameUpgrade, RebootWay_Framework);	
 }
 
 void CHealthManagerEntity::ControlEntityLife(SpReqAnsContext<HealthManagerService_ControlEntityLife_Req, HealthManagerService_ControlEntityLife_Ans>::Pointer ctx)

+ 2 - 6
Module/mod_healthmanager/mod_healthmanager.h

@@ -89,7 +89,7 @@ public:
 		m_bWaitRestartPC(false)
 		, m_bScreenLock(false)
 		, m_bSayIdle(false), m_bGuardianRun(false), m_guardianCount(1), m_pUpgMgr(NULL)
-		, m_bVerRollback(false), m_eRebootTrigger(RebootTrigger_Resource), m_eRebootWay(RebootWay_Unknown)
+		, m_bVerRollback(false)
 		, m_menuChoice(""), m_menuPre(""), m_netState("N"), m_bBrowserIdleFirst(true)
 		, m_bInMainPage(false), m_stopSelfCheck(0)
 		, m_bEnterMainPageEver(false),m_bHaveThrowMainPage(false)
@@ -226,9 +226,6 @@ public:
 	virtual bool IsService()const{return true;}
 	virtual bool IsMultiThread()const{return true;}
 
-	int SystemRestart(bool bPeriod, bool bNow = false);
-	int SystemShutdown(BOOL bReboot=FALSE);
-	int FrameworkShutdown(bool bRestart=true);
 	void QueryHardwareInfo(SpReqAnsContext<HealthManagerService_QueryHardwareInfo_Req, HealthManagerService_QueryHardwareInfo_Ans>::Pointer ctx)
 	{
 		QueryHardwareInfoTask* pTask = new QueryHardwareInfoTask(&m_fsm);
@@ -275,8 +272,7 @@ private:
 	DWORD m_dwTimeOfAuthSuc;
 	int m_maxWaitMainpageTime;
 	ULONGLONG m_OSRunTicks;
-	RebootTriggerEnum m_eRebootTrigger;
-	RebootWayEnum m_eRebootWay;
+
 	CSimpleStringA m_menuChoice,m_currentVer,m_menuPre,m_netState, m_versionEx;
 	map<CSimpleStringA,ModuleRunInfo> m_modRunInfo;
 	UpgradeMgrService_ClientBase *m_pUpgMgr;