|
|
@@ -1199,7 +1199,7 @@ ErrorCodeEnum SpEntityPrivilege::DeleteFileInNewVersion(const char *pszRelativeF
|
|
|
ErrorCodeEnum SpEntityPrivilege::RollBackToPreviousVersion()
|
|
|
{
|
|
|
auto env = sp_get_env();
|
|
|
- auto cfg = env->cfg;
|
|
|
+ auto cfg = env->cfg;
|
|
|
|
|
|
// 修改当前Install.ini配置
|
|
|
auto &v = cfg->install_ini->install_version;
|
|
|
@@ -1228,22 +1228,73 @@ ErrorCodeEnum SpEntityPrivilege::RollBackToPreviousVersion()
|
|
|
// 修改当前版本状态为倒回R
|
|
|
int nRet = inifile_write_str(cfg->install_ini_path, curVersion.ToString(), "InstallState", "R");
|
|
|
|
|
|
+ // 更新回退次数
|
|
|
+ auto nTotalRollbackCount = inifile_read_int(cfg->install_ini_path, curVersion.ToString(), "TotalRollbackCount", 0);
|
|
|
+ nTotalRollbackCount++;
|
|
|
+ nRet = inifile_write_int(cfg->install_ini_path, curVersion.ToString(), "TotalRollbackCount", nTotalRollbackCount);
|
|
|
+ if (-1 == nRet)
|
|
|
+ {
|
|
|
+ LogError(Severity_Low, Error_Unexpect, 0, "inifile_write_int TotalRollbackCount");
|
|
|
+ }
|
|
|
+ LOG_TRACE("inifile_write_int, nTotalRollbackCount[%d]", nTotalRollbackCount);
|
|
|
+
|
|
|
// 修改active.txt文件
|
|
|
CSimpleStringA strActiveFile = CSimpleStringA::Format("%s\\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)
|
|
|
+ if (hFile == INVALID_HANDLE_VALUE)
|
|
|
{
|
|
|
LogError(Severity_Low, Error_Unexpect, 0, "open active.txt fail");
|
|
|
return Error_Unexpect;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
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_ALL, 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;
|
|
|
}
|
|
|
|
|
|
@@ -1283,6 +1334,16 @@ ErrorCodeEnum SpEntityPrivilege::RollBackToHistoryVersion(CVersion historyVersio
|
|
|
// 修改当前版本状态为倒回R
|
|
|
int nRet = inifile_write_str(cfg->install_ini_path, curVersion.ToString(), "InstallState", "R");
|
|
|
|
|
|
+ // 更新回退次数
|
|
|
+ auto nTotalRollbackCount = inifile_read_int(cfg->install_ini_path, curVersion.ToString(), "TotalRollbackCount", 0);
|
|
|
+ nTotalRollbackCount++;
|
|
|
+ nRet = inifile_write_int(cfg->install_ini_path, curVersion.ToString(), "TotalRollbackCount", nTotalRollbackCount);
|
|
|
+ if (-1 == nRet)
|
|
|
+ {
|
|
|
+ LogError(Severity_Low, Error_Unexpect, 0, "inifile_write_int TotalRollbackCount");
|
|
|
+ }
|
|
|
+ LOG_TRACE("inifile_write_int, nTotalRollbackCount[%d]", nTotalRollbackCount);
|
|
|
+
|
|
|
// 修改active.txt文件
|
|
|
CSimpleStringA strActiveFile = CSimpleStringA::Format("%s\\active.txt", env->dir->root_ver_path);
|
|
|
HANDLE hFile = ::CreateFileA(strActiveFile, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
|
@@ -1298,6 +1359,31 @@ ErrorCodeEnum SpEntityPrivilege::RollBackToHistoryVersion(CVersion historyVersio
|
|
|
FlushFileBuffers(hFile);
|
|
|
SetEndOfFile(hFile);
|
|
|
CloseHandle(hFile);
|
|
|
+
|
|
|
+ //出现active文件为空的问题,此处增加写文件件后再读一次,确认是否写成功,以此来确认是否是写文件导致
|
|
|
+ if (1)
|
|
|
+ {
|
|
|
+ hFile = ::CreateFileA(strActiveFile, GENERIC_WRITE, 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;
|
|
|
}
|
|
|
@@ -1344,6 +1430,7 @@ ErrorCodeEnum SpEntityPrivilege::UpgradeToNewVersion(bool bToSysInstall)
|
|
|
FlushFileBuffers(hFile);
|
|
|
SetEndOfFile(hFile);
|
|
|
CloseHandle(hFile);
|
|
|
+ LOG_TRACE("WriteFile [%s] to active.txt", (const char*)strNewVer);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -1351,6 +1438,30 @@ ErrorCodeEnum SpEntityPrivilege::UpgradeToNewVersion(bool bToSysInstall)
|
|
|
LogError(Severity_Low, Error_Unexpect, 0, "open active.txt fail");
|
|
|
}
|
|
|
|
|
|
+ //出现active文件为空的问题,此处增加写文件件后再读一次,确认是否写成功,以此来确认是否是写文件导致
|
|
|
+ if (1)
|
|
|
+ {
|
|
|
+ hFile = ::CreateFileA(strActiveFile, GENERIC_WRITE, 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);
|
|
|
+ }
|
|
|
+
|
|
|
// 修改内存配置
|
|
|
if (bSetSucc)
|
|
|
{
|