|
|
@@ -127,6 +127,16 @@ void GetCurUserName(CSimpleStringA& strUserName)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void GetUserDesktopDirectory(CSimpleStringA& outDir)
|
|
|
+{
|
|
|
+ LPITEMIDLIST lp;
|
|
|
+ SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, &lp);
|
|
|
+ CHAR lstr[128] = "";
|
|
|
+ SHGetPathFromIDList(lp, lstr);
|
|
|
+ outDir = lstr;
|
|
|
+ return;
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
void GetAutoStartFile(std::string& userDirPath, std::vector<std::string>& userDirFiles, std::string& pubDirPath, std::vector<std::string>& pubDirFiles)
|
|
|
{
|
|
|
@@ -1562,10 +1572,8 @@ bool ResourceWatcherFSM::CreateLink(int nType, const CSimpleStringA& exePath)
|
|
|
LPITEMIDLIST lp;
|
|
|
CHAR lstr[MAX_PATH] = "";
|
|
|
if (nType == 0) {
|
|
|
- SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, &lp);
|
|
|
- memset(lstr, 0, strlen(lstr));
|
|
|
- SHGetPathFromIDList(lp, lstr);
|
|
|
- CSimpleStringA s = lstr;
|
|
|
+ CSimpleStringA s(true);
|
|
|
+ GetUserDesktopDirectory(s);
|
|
|
s += "\\可视柜台.lnk";
|
|
|
if (!(result = CreateLinkFile(exePath, "", s, icoPath))) {
|
|
|
DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Create link file for DESKTOP fail");
|
|
|
@@ -1748,42 +1756,57 @@ void ResourceWatcherFSM::DetectAutoStartupCover()
|
|
|
case 6: //设置为开机后开始菜单自启动(涵盖所有类型)
|
|
|
{
|
|
|
CSimpleStringA exePath(true);
|
|
|
- if (GetVTMExePath(exePath, true)) {
|
|
|
- if (nStartupType == 1 || nStartupType == 2) {
|
|
|
- //TODO: 如果出现修改注册表成功但是设置自启动图标失败的情况 [Gifur@202492]
|
|
|
- rc = ChangeAutoStartupWithExe(false, true);
|
|
|
- if (rc == Error_Succeed) {
|
|
|
- rc = CreateLink(2, exePath) ? Error_Succeed : Error_Unexpect;
|
|
|
- if (rc != Error_Succeed) {
|
|
|
- LogWarn(Severity_Middle, Error_InvalidState, LOG_WARN_CREATE_EXELINK_FROMAUTOSTART_FAILED,
|
|
|
- CSimpleStringA::Format("Create autostart lnk failed, old start type: %d", nStartupType));
|
|
|
- }
|
|
|
- else {
|
|
|
- LogWarn(Severity_Low, Error_Debug, LOG_WARN_CREATE_EXELINK_FROMAUTOSTART_SUCC,
|
|
|
- CSimpleStringA::Format("Create autostart lnk succ, old start type: %d", nStartupType));
|
|
|
- DeleteDuplicateAutoStartFile(true);
|
|
|
- }
|
|
|
- }
|
|
|
+ if (nStartupType == 1 || nStartupType == 2 || nStartupType == 3 || nStartupType == 5) {
|
|
|
+ if (GetVTMExePath(exePath, true)) {
|
|
|
+ if (nStartupType == 1 || nStartupType == 2) {
|
|
|
+ //TODO: 如果出现修改注册表成功但是设置自启动图标失败的情况 [Gifur@202492]
|
|
|
+ rc = ChangeAutoStartupWithExe(false, true);
|
|
|
+ }
|
|
|
+ else if (nStartupType == 3 || nStartupType == 5) {
|
|
|
+ rc = Error_Succeed;
|
|
|
+ }
|
|
|
+ if (rc == Error_Succeed) {
|
|
|
+ rc = CreateLink(2, exePath) ? Error_Succeed : Error_Unexpect;
|
|
|
+ if (rc != Error_Succeed) {
|
|
|
+ LogWarn(Severity_Middle, Error_InvalidState, LOG_WARN_CREATE_EXELINK_FROMAUTOSTART_FAILED,
|
|
|
+ CSimpleStringA::Format("Create autostart lnk failed, old start type: %d", nStartupType));
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ LogWarn(Severity_Low, Error_Debug, LOG_WARN_CREATE_EXELINK_FROMAUTOSTART_SUCC,
|
|
|
+ CSimpleStringA::Format("Create autostart lnk succ, old start type: %d", nStartupType));
|
|
|
+ DeleteDuplicateAutoStartFile(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ LogWarn(Severity_Middle, Error_InvalidState, LOG_WARN_CREATE_EXELINK_FROMAUTOSTART_FAILED,
|
|
|
+ CSimpleStringA::Format("[%d][%s] is not exist", setType, exePath.GetData()));
|
|
|
}
|
|
|
- else if (nStartupType == 3 || nStartupType == 5) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ case 7: //设置为开机后开始菜单自启动(针对仅有桌面开机自启动的)
|
|
|
+ {
|
|
|
+ CSimpleStringA exePath(true);
|
|
|
+ if ((nStartupType == 3 || nStartupType == 5)) {
|
|
|
+ if (GetVTMExePath(exePath, true)) {
|
|
|
rc = CreateLink(2, exePath) ? Error_Succeed : Error_Unexpect;
|
|
|
if (rc != Error_Succeed) {
|
|
|
- LogWarn(Severity_Middle, Error_InvalidState, LOG_WARN_CREATE_EXELINK_FROMAUTOSTART_FAILED,
|
|
|
- CSimpleStringA::Format("Create autostart lnk failed, old start type: %d", nStartupType));
|
|
|
+ LogWarn(Severity_Middle, Error_InvalidState, LOG_WARN_CREATE_EXELINK_FROMAUTOSTART_FAILED,
|
|
|
+ CSimpleStringA::Format("Create autostart lnk failed, old start type: %d", nStartupType));
|
|
|
}
|
|
|
else {
|
|
|
- LogWarn(Severity_Low, Error_Debug, LOG_WARN_CREATE_EXELINK_FROMAUTOSTART_SUCC,
|
|
|
- CSimpleStringA::Format("Create autostart lnk succ, old start type: %d", nStartupType));
|
|
|
- toDeleteAutoStartFile = true;
|
|
|
- DeleteDuplicateAutoStartFile(true);
|
|
|
+ LogWarn(Severity_Low, Error_Debug, LOG_WARN_CREATE_EXELINK_FROMAUTOSTART_SUCC,
|
|
|
+ CSimpleStringA::Format("Create autostart lnk succ, old start type: %d", nStartupType));
|
|
|
+ toDeleteAutoStartFile = true;
|
|
|
+ DeleteDuplicateAutoStartFile(true);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
- else {
|
|
|
- LogWarn(Severity_Middle, Error_InvalidState, LOG_WARN_CREATE_EXELINK_FROMAUTOSTART_FAILED,
|
|
|
- CSimpleStringA::Format("[%s] is not exist", exePath.GetData()));
|
|
|
- }
|
|
|
- }
|
|
|
+ else {
|
|
|
+ LogWarn(Severity_Middle, Error_InvalidState, LOG_WARN_CREATE_EXELINK_FROMAUTOSTART_FAILED,
|
|
|
+ CSimpleStringA::Format("[%d][%s] is not exist", setType, exePath.GetData()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
@@ -2353,6 +2376,7 @@ void ResourceWatcherFSM::DetectAutoStartFileAndWarn()
|
|
|
std::string strUserAutoList = "";
|
|
|
std::string strPubAutoList = "";
|
|
|
int userAutoCnt = 0, pubAutoCnt = 0;
|
|
|
+ int catchLegitCnt = 0;
|
|
|
std::vector<std::string> autolist;
|
|
|
autolist.push_back(CMB_LINK_FILE_NAME);
|
|
|
autolist.push_back(STRATUP_FILENAME_FROM_SCRIPTS);
|
|
|
@@ -2374,6 +2398,7 @@ void ResourceWatcherFSM::DetectAutoStartFileAndWarn()
|
|
|
if (!strUserAutoList.empty()) { strUserAutoList += "|"; }
|
|
|
strUserAutoList += it->c_str();
|
|
|
userAutoCnt++;
|
|
|
+ catchLegitCnt++;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
@@ -2395,6 +2420,7 @@ void ResourceWatcherFSM::DetectAutoStartFileAndWarn()
|
|
|
if (!strPubAutoList.empty()) { strPubAutoList += "|"; }
|
|
|
strPubAutoList += it->c_str();
|
|
|
pubAutoCnt++;
|
|
|
+ catchLegitCnt++;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
@@ -2405,8 +2431,8 @@ void ResourceWatcherFSM::DetectAutoStartFileAndWarn()
|
|
|
|
|
|
if (pubAutoCnt + userAutoCnt > 1) {
|
|
|
LogWarn(Severity_Low, Error_Debug, LOG_INFO_AUTOSTART_INTEREST_FILESTATUS
|
|
|
- , CSimpleStringA::Format("{\"subject\":\"duplicate_vtm_autostart_file\", \"user_count\":%d, \"pub_count\":%d, \"user\":\"%s\",\"public\":\"%s\"}"
|
|
|
- , userAutoCnt, pubAutoCnt, strUserAutoList.c_str(), strPubAutoList.c_str()));
|
|
|
+ , CSimpleStringA::Format("{\"subject\":\"duplicate_vtm_autostart_file\", \"user_count\":%d, \"pub_count\":%d, \"user\":\"%s\",\"public\":\"%s\", \"legal_count\":%d, \"delete_flag\":%d}"
|
|
|
+ , userAutoCnt, pubAutoCnt, strUserAutoList.c_str(), strPubAutoList.c_str(), catchLegitCnt, flag4DeleteKeyAutoStartFile));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -2593,16 +2619,6 @@ bool ResourceWatcherFSM::RegWtVtmVersion(const CSimpleStringA& vtmVer)
|
|
|
return bRet;
|
|
|
}
|
|
|
|
|
|
-static void GetUserDesktopDire(CSimpleStringA& outDir)
|
|
|
-{
|
|
|
- LPITEMIDLIST lp;
|
|
|
- SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, &lp);
|
|
|
- CHAR lstr[128] = "";
|
|
|
- SHGetPathFromIDList(lp, lstr);
|
|
|
- outDir = lstr;
|
|
|
- return;
|
|
|
-}
|
|
|
-
|
|
|
bool ResourceWatcherFSM::RegOperation4LnkFile()
|
|
|
{
|
|
|
bool bRet = true;
|
|
|
@@ -2630,7 +2646,7 @@ bool ResourceWatcherFSM::RegOperation4LnkFile()
|
|
|
}
|
|
|
}
|
|
|
CSimpleStringA s(true);
|
|
|
- GetUserDesktopDire(s);
|
|
|
+ GetUserDesktopDirectory(s);
|
|
|
s += "\\可视柜台.lnk";
|
|
|
if (bRet && !ExistsFileA(s)) {
|
|
|
bRet = CreateLink(0, exePath);
|