Browse Source

Z991239-5719 #comment 写入active.txt接口统一

80374374 11 months ago
parent
commit
b2b65f6992
2 changed files with 72 additions and 131 deletions
  1. 69 131
      Framework/spbase/SpEntityPrivilege.cpp
  2. 3 0
      Framework/spbase/SpEntityPrivilege.h

+ 69 - 131
Framework/spbase/SpEntityPrivilege.cpp

@@ -428,6 +428,63 @@ bool SpEntityPrivilege::RecursiveCopyDir(const char *pszSourceDir, const char *p
 	return true;
 }
 
+ErrorCodeEnum SpEntityPrivilege::UpdateActiveTxt(const char* strActiveFilePath, const char* toWriteVersionStr, bool toCheck)
+{
+	HANDLE hFile = ::CreateFileA(strActiveFilePath, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+	BOOL bSetSucc = FALSE;
+	if (hFile == INVALID_HANDLE_VALUE)
+	{
+		LogError(Severity_Low, Error_Unexpect, 0, "open active.txt fail");
+		return Error_Unexpect;
+	}
+	DWORD dwWrittenLen(0);
+	bSetSucc = WriteFile(hFile, toWriteVersionStr, strlen(toWriteVersionStr), &dwWrittenLen, NULL);
+	FlushFileBuffers(hFile);
+	SetEndOfFile(hFile);
+	CloseHandle(hFile);
+	LOG_TRACE("write version [%s] succeed", toWriteVersionStr);
+
+	//出现active文件为空的问题,此处增加写文件件后再读一次,确认是否写成功,以此来确认是否是写文件导致
+	if (toCheck) {
+		hFile = ::CreateFileA(strActiveFilePath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+		if (hFile == INVALID_HANDLE_VALUE)
+		{
+			LogError(Severity_Low, Error_Unexpect, 0, "open active.txt fail");
+			return Error_Unexpect;
+		}
+
+		DWORD dwReadLen(0);
+		char cVer[16] = { 0 };
+
+		if (ReadFile(hFile, cVer, 16, &dwReadLen, NULL))
+		{
+			LOG_TRACE("read active.txt, version len[%d], version[%s]", dwReadLen, cVer);
+
+			//如果为空,则重写
+			if (strlen(cVer) == 0)
+			{
+				if (WriteFile(hFile, toWriteVersionStr, strlen(toWriteVersionStr), &dwWrittenLen, NULL))
+				{
+					LOG_TRACE("rewrite active.txt success, strPrevVersion[%s]", toWriteVersionStr);
+				}
+				else
+				{
+					LogError(Severity_Low, Error_Unexpect, 0, "rewrite active.txt fail");
+				}
+			}
+		}
+		else
+		{
+			LogError(Severity_Low, Error_Unexpect, 0, "Read active.txt fail");
+		}
+
+		FlushFileBuffers(hFile);
+		SetEndOfFile(hFile);
+		CloseHandle(hFile);
+	}
+	return bSetSucc ? Error_Succeed : Error_Unexpect;
+}
+
 // 创建新版本目录,拷贝当前版本bin、cfg、dep、mod、install.ini,并修改Shell.ini及install.ini中相关配置
 ErrorCodeEnum SpEntityPrivilege::CreateInstallNewVersion(CVersion NewSoftwareVersion,const char *pszPackageName, CSimpleStringA& strErrInfo)
 {	
@@ -1519,62 +1576,11 @@ ErrorCodeEnum SpEntityPrivilege::RollBackToPreviousVersion()
 
 	// 修改active.txt文件
 	CSimpleStringA strActiveFile = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "active.txt", env->dir->root_ver_path);
-	HANDLE hFile = ::CreateFileA(strActiveFile, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-	BOOL bSetSucc = FALSE;
-	if (hFile == INVALID_HANDLE_VALUE)
-	{
-		LogError(Severity_Low, Error_Unexpect, 0, "open active.txt fail");
-		return Error_Unexpect;
+	auto result = UpdateActiveTxt(strActiveFile, strPrevVersion, true);
+	if (result == Error_Succeed) {
+		LOG_TRACE("set rollback to previous version [%s] succeed", (const char*)strPrevVersion);
 	}
-
-	DWORD dwWrittenLen(0);
-	bSetSucc = WriteFile(hFile, (const char*)strPrevVersion, strPrevVersion.GetLength(), &dwWrittenLen, NULL);
-	FlushFileBuffers(hFile);
-	SetEndOfFile(hFile);
-	CloseHandle(hFile);
-	LOG_TRACE("set rollback to previous version [%s] succeed", (const char*)strPrevVersion);
-
-	//出现active文件为空的问题,此处增加写文件件后再读一次,确认是否写成功,以此来确认是否是写文件导致
-	if (1)
-	{
-		hFile = ::CreateFileA(strActiveFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-		if (hFile == INVALID_HANDLE_VALUE)
-		{
-			LogError(Severity_Low, Error_Unexpect, 0, "open active.txt fail");
-			return Error_Unexpect;
-		}
-
-		DWORD dwReadLen(0);
-		char cVer[16] = { 0 };
-
-		if (ReadFile(hFile, cVer, 16, &dwReadLen, NULL))
-		{
-			LOG_TRACE("read active.txt, version len[%d], version[%s]", dwReadLen, cVer);
-
-			//如果为空,则重写
-			if (strlen(cVer) == 0)
-			{
-				if (WriteFile(hFile, (const char*)strPrevVersion, strPrevVersion.GetLength(), &dwWrittenLen, NULL))
-				{
-					LOG_TRACE("rewrite active.txt success, strPrevVersion[%s]", strPrevVersion);
-				}
-				else
-				{
-					LogError(Severity_Low, Error_Unexpect, 0, "rewrite active.txt fail");
-				}
-			}
-		}
-		else
-		{
-			LogError(Severity_Low, Error_Unexpect, 0, "Read active.txt fail");
-		}
-
-		FlushFileBuffers(hFile);
-		SetEndOfFile(hFile);
-		CloseHandle(hFile);
-	}
-	
-	return bSetSucc ? Error_Succeed : Error_Unexpect;
+	return result;
 }
 
 ErrorCodeEnum SpEntityPrivilege::RollBackToHistoryVersion(CVersion historyVersion)
@@ -1625,46 +1631,11 @@ ErrorCodeEnum SpEntityPrivilege::RollBackToHistoryVersion(CVersion historyVersio
 
 	// 修改active.txt文件
 	CSimpleStringA strActiveFile = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "active.txt", env->dir->root_ver_path);
-	HANDLE hFile = ::CreateFileA(strActiveFile, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-	BOOL bSetSucc = FALSE;
-	if (hFile == INVALID_HANDLE_VALUE) 
-	{
-		LogError(Severity_Low, Error_Unexpect, 0, "open active.txt fail");
-		return Error_Unexpect;
+	auto result = UpdateActiveTxt(strActiveFile, strHisVersion, true);
+	if (result == Error_Succeed) {
+		LOG_TRACE("set rollback to history version [%s] succeed", (const char*)strHisVersion);
 	}
-	
-	DWORD dwWrittenLen(0);
-	bSetSucc = WriteFile(hFile, (const char*)strHisVersion, strHisVersion.GetLength(), &dwWrittenLen, NULL);
-	FlushFileBuffers(hFile);
-	SetEndOfFile(hFile);
-	CloseHandle(hFile);
-
-	//出现active文件为空的问题,此处增加写文件件后再读一次,确认是否写成功,以此来确认是否是写文件导致
-	if (1)
-	{
-		hFile = ::CreateFileA(strActiveFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-		if (hFile == INVALID_HANDLE_VALUE) 
-		{
-			LogError(Severity_Low, Error_Unexpect, 0, "open active.txt fail");
-			return Error_Unexpect;
-		}
-
-		DWORD dwReadLen(0);
-		char cVer[16] = {0};
-
-		if (ReadFile(hFile,cVer,16,&dwReadLen,NULL))
-		{
-			LOG_TRACE("read active.txt, version len[%d], version[%s]", dwReadLen, cVer);
-		}
-		else
-		{
-			LogError(Severity_Low, Error_Unexpect, 0, "Read active.txt fail");
-		}
-
-		CloseHandle(hFile);
-	}
-	LOG_TRACE("set rollback to history version [%s] succeed", (const char*)strHisVersion);
-	return bSetSucc ? Error_Succeed : Error_Unexpect;
+	return result;
 }
 
 ErrorCodeEnum SpEntityPrivilege::UpgradeToNewVersion(bool bToSysInstall)
@@ -1703,47 +1674,14 @@ ErrorCodeEnum SpEntityPrivilege::UpgradeToNewVersion(bool bToSysInstall)
 	nRet &= inifile_write_str(strNewInstallIni, curVersion.ToString(), "InstallState", "U");			// 已升级
 	nRet &= inifile_write_str(strNewInstallIni, strNewVer, "InstallState", "S");			// 设置启动
 
+	BOOL bSetSucc = (nRet == 0);
 	// 修改active.txt配置
 	CSimpleStringA strActiveFile = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "active.txt", env->dir->root_ver_path);
-	HANDLE hFile = ::CreateFileA(strActiveFile, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-	BOOL bSetSucc = (nRet == 0);
-	if (hFile != INVALID_HANDLE_VALUE) 
-	{
-		DWORD dwWrittenLen(0);
-		bSetSucc = bSetSucc && WriteFile(hFile, (const char*)strNewVer, strNewVer.GetLength(), &dwWrittenLen, NULL);
-		FlushFileBuffers(hFile);
-		SetEndOfFile(hFile);
-		CloseHandle(hFile);
-		LOG_TRACE("WriteFile [%s] to active.txt", (const char*)strNewVer);
+	if (bSetSucc && Error_Succeed == UpdateActiveTxt(strActiveFile, strNewVer, true)) {
+		bSetSucc = TRUE;
 	}
-	else
-	{
+	else {
 		bSetSucc = FALSE;
-		LogError(Severity_Low, Error_Unexpect, 0, "open active.txt fail");
-	}
-
-	//出现active文件为空的问题,此处增加写文件件后再读一次,确认是否写成功,以此来确认是否是写文件导致
-	if (1)
-	{
-		hFile = ::CreateFileA(strActiveFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
-		if (hFile == INVALID_HANDLE_VALUE) 
-		{
-			LogError(Severity_Low, Error_Unexpect, 0, "open active.txt fail");
-			return Error_Unexpect;
-		}
-
-		DWORD dwReadLen(0);
-		char cVer[16] = {0};
-
-		if (ReadFile(hFile,cVer,16,&dwReadLen,NULL))
-		{
-			LOG_TRACE("read active.txt, version len[%d], version[%s]", dwReadLen, cVer);
-		}
-		else
-		{
-			LogError(Severity_Low, Error_Unexpect, 0, "Read active.txt fail");
-		}
-		CloseHandle(hFile);
 	}
 
 	// 修改内存配置

+ 3 - 0
Framework/spbase/SpEntityPrivilege.h

@@ -113,6 +113,9 @@ private:
 	bool GetSysUpgradeResult(const char *pszResultLog, ErrorCodeEnum &eErrorCode, CSimpleStringA &strErrMsg);
 	bool RecursiveCopyDir(const char* pszSourceDir, const char* pszDestDir, CSimpleStringA& strErrInfo);
 
+	ErrorCodeEnum UpdateActiveTxt(const char* strActiveFilePath, const char* toWriteVersionStr, bool toCheck = false);
+
+
 protected:
 	spinlock_t m_maplock;
 	stringmap_t *m_pEntityStateListenerMap;