Преглед изворни кода

#IQRV #comment 优化设置自启动的逻辑

80374374 пре 1 година
родитељ
комит
be39fc7217
1 измењених фајлова са 62 додато и 46 уклоњено
  1. 62 46
      Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp

+ 62 - 46
Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp

@@ -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);