|
@@ -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);
|
|
|
}
|
|
|
|
|
|
// 修改内存配置
|