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

Z991239-5492 #comment feat: 同步ST2的相关改动

陈纪林80310970 пре 1 година
родитељ
комит
3a6dfc6197

+ 204 - 111
Module/mod_ResourceWatcher/ResourceWatcherFSM.cpp

@@ -8,6 +8,7 @@
 #include "fileutil.h"
 #include <ctime>
 #include "CommEntityUtil.hpp"
+#include "SpUtility.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include "ResourceWatcher_UserCode.h"
@@ -289,15 +290,7 @@ void ResourceWatcherFSM::TriggerAtStatusChanged(bool bMStatus)
             VerifyDigitSignTask* task = new VerifyDigitSignTask(this);
             GetEntityBase()->GetFunction()->PostThreadPoolTask(task);
         }
-
-		if (IsHasSetAutoStartupByFolder()) {
-			/**  因为安装时已经设置为开机自启动了,所以要把注册表的开机自启动取消掉(如果有) Gifur@20221017]*/
-			m_forceStartupWithExeFlag = 3;
-		}
-		else {
-			InitialAutoStartupSetType();
-		}
-		DetectAutoStartupCover();
+        
 #endif //RVC_OS_WIN
 
         if (hardwareCheckTime <= 0) { //非法数值情况下设置为默认一分钟
@@ -371,14 +364,10 @@ ErrorCodeEnum ResourceWatcherFSM::OnInit()
     m_bFirstRunAfterBoot = DetectIsFirstRunAtBoot();
     if (m_bFirstRunAfterBoot) {
         DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("First time to run after system boot.");
-#if defined(RVC_OS_WIN)
-        m_DoneDetectAutostart = false;
-#endif //RVC_OS_WIN
     }
 
     if (m_bFirstRunAfterBoot) {
 #if defined(RVC_OS_WIN)
-        DetectDesktopFileAndWarn();
 		//GetSystemMetrics (SM_CMONITORS) 计数仅显示可见的显示器
 		const int screenNums = GetSystemMetrics(SM_CMONITORS);
 		const int aimScreenNums4Stand2S = 2;
@@ -413,6 +402,28 @@ ErrorCodeEnum ResourceWatcherFSM::OnExit()
 
 void ResourceWatcherFSM::AfterInit()
 {
+#if defined(RVC_OS_WIN)
+    if (m_bFirstRunAfterBoot) {
+
+		DetectAutoStartupCover();
+
+		CSmartPointer<IConfigInfo> spCtSettingConfig;
+		GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spCtSettingConfig);
+
+		int clearDesktopFlag(0);
+		CSimpleStringA strFileWhiteSheet(true);
+		spCtSettingConfig->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "ClearDesktopSwitch", clearDesktopFlag);
+		if (!!clearDesktopFlag) {
+			spCtSettingConfig->ReadConfigValue(GetEntityBase()->GetEntityName(), "DesktopWhiteSheet", strFileWhiteSheet);
+            if (!strFileWhiteSheet.IsNullOrEmpty()) {
+                std::string strLowFileName = SP::Utility::ToLower(std::string(strFileWhiteSheet.GetData()));
+                strFileWhiteSheet = strLowFileName.c_str();
+            }
+		}
+		DetectDestopFileAndWarn(!!clearDesktopFlag, strFileWhiteSheet);
+    }
+	DetectVersionHasChangedAndWarnCover();
+#endif //RVC_OS_WIN
 }
 
 void ResourceWatcherFSM::LinkDetect(int detectType, const char* url, bool& status, unsigned int& delay, int warnFlag)
@@ -1666,18 +1677,51 @@ bool ResourceWatcherFSM::GetRegValue(HKEY hKey, LPCTSTR lpcszParam,
 
 void ResourceWatcherFSM::DetectAutoStartupCover()
 {
-    int bStartupByVbs(0);
-    DetectAutoStartup(bStartupByVbs);
-    if (m_forceStartupWithExeFlag == 1 && bStartupByVbs == 1 && !m_IsPadDevice) {
-        ChangeAutoStartupWithExe(); //test succ
-    }
-    else if (m_forceStartupWithExeFlag == 2 && (bStartupByVbs == 0 || bStartupByVbs == 1) && !m_IsPadDevice)
-    {
-        ChangeAutoStartupWithExe(); //test succ || test succ
+    const int nStartupType = DetectAutoStartupType();
+    ErrorCodeEnum rc = Error_InvalidState;
+    int setType = 0;
+    bool toCheckAndDelteAutostartFile(false);
+    switch (setType)
+    {
+    case 1://将VBS改成EXE,前提是VBS必须已在注册表
+        if (nStartupType == 1) {
+            rc = ChangeAutoStartupWithExe();
+        }
+        break;
+    case 2: //设置使用EXE自启动
+		if (nStartupType == 1 || nStartupType == 0 || nStartupType == 3) {
+			rc = ChangeAutoStartupWithExe();
+			if (rc == Error_Succeed && nStartupType == 3) {
+                toCheckAndDelteAutostartFile = true;
+			}
+        }
+        break;
+    case 3: //不设置开机自启动
+		if (nStartupType == 1 || nStartupType == 2) {
+			rc = ChangeAutoStartupWithExe(false, true);
+        }
+        else if (nStartupType == 3) {
+            toCheckAndDelteAutostartFile = true;
+        }
+        break;
+    case 4: //恢复VBS启动(防止EXE启动失败)
+		if (nStartupType == 2 || nStartupType == 0 || nStartupType == 3) {
+			rc = ChangeAutoStartupWithExe(true);
+            if (rc == Error_Succeed && nStartupType == 3) {
+                toCheckAndDelteAutostartFile = true;
+            }
+		}
+        break;
+    default:
+        break;
     }
-    else if (m_forceStartupWithExeFlag == 3 && (bStartupByVbs == 1 || bStartupByVbs == 2))
-    {
-        ChangeAutoStartupWithExe(true); //test succ || test succ
+
+    if (toCheckAndDelteAutostartFile) {
+		CSimpleStringA strLnkPath(true);
+		if (IsHasSetAutoStartupByFolder(strLnkPath) && !strLnkPath.IsNullOrEmpty()) {
+			DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("remove auto start lnk file: %s", strLnkPath.GetData());
+			RemoveFileA(strLnkPath);
+		}
     }
 }
 
@@ -1703,15 +1747,11 @@ static int Is32R64Platform()
     return isWow64;
 }
 
-void ResourceWatcherFSM::DetectAutoStartup(int& vbsType)
+int ResourceWatcherFSM::DetectAutoStartupType()
 {
     LOG_FUNCTION();
 
-    vbsType = -1;
-    if (m_DoneDetectAutostart) {
-        vbsType = -2;
-        return;
-    }
+    int vbsType = -1;
     DWORD dwFlag = KEY_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS;
     if (Is32R64Platform() != 0) {
         dwFlag |= KEY_WOW64_64KEY;
@@ -1727,22 +1767,24 @@ void ResourceWatcherFSM::DetectAutoStartup(int& vbsType)
         TCHAR szValue[MAX_PATH + 1] = { 0 };
         lResult = RegQueryValueEx(hKey, "Shell", NULL, &dwType, (LPBYTE)szValue, &dwSize);
         if (lResult == ERROR_SUCCESS) {
-            CSimpleStringA value(szValue);
-            if (value.IsNullOrEmpty() || value.Compare("explorer.exe") != 0) {
-                if (value.IsEndWith(".vbs", true)) {
-                    LogWarn(Severity_Low, Error_Debug, LOG_WARN_AUTO_STARTUP_FROM_REGIST, value);
-                    vbsType = 1;
-                }
-                else if (value.IsEndWith("VTM.exe", true)) {
-                    LogWarn(Severity_Low, Error_Debug, LOG_WARN_CHECK_AUTO_STARTUP_WITH_EXE, value);
-                    vbsType = 2;
-                }
+            std::string strValue(szValue);
+            strValue = SP::Utility::ToLower(strValue);
+            CSimpleStringA value(strValue.c_str());
+			if (value.IsStartWith("spexplorer", true) && value.IsEndWith(".vbs", true)) {
+				LogWarn(Severity_Low, Error_Debug, LOG_WARN_AUTO_STARTUP_FROM_REGIST, value);
+				vbsType = 1;
+			}
+			else if (value.IsEndWith("vtm.exe", true)) {
+				LogWarn(Severity_Low, Error_Debug, LOG_WARN_CHECK_AUTO_STARTUP_WITH_EXE, value);
+				vbsType = 2;
+			}
+			else if (value.Compare("explorer.exe") == 0 || value.IsNullOrEmpty()) {
+                LogWarn(Severity_Low, Error_Debug, LOG_WARN_NOT_AUTO_STARTUP_FROM_REGIST, value);
+                vbsType = 0;
             }
             else {
-                LogWarn(Severity_Low, Error_Debug, LOG_WARN_NOT_AUTO_STARTUP_FROM_REGIST, value);
-                if (value.Compare("explorer.exe") == 0) {
-                    vbsType = 0;
-                }
+				LogWarn(Severity_Low, Error_Debug, LOG_WARN_CHECK_AUTO_STARTUP_UNKNOWN, value);
+                vbsType = 0;
             }
         }
         else {
@@ -1755,11 +1797,18 @@ void ResourceWatcherFSM::DetectAutoStartup(int& vbsType)
             CSimpleStringA::Format("RegOpenKeyEx error, GLE=%u.", GetLastError()));
     }
     RegCloseKey(hKey);
-    m_DoneDetectAutostart = true;
-    return;
+
+    if (vbsType == 0 || vbsType == -1) {
+		CSimpleStringA strLnkPath(true);
+		if (IsHasSetAutoStartupByFolder(strLnkPath)) {
+			LogWarn(Severity_Low, Error_Debug, LOG_WARN_CHECK_AUTO_STARTUP_WITH_STARTMENU, strLnkPath);
+			vbsType = 3;
+		}
+    }
+    return vbsType;
 }
 
-ErrorCodeEnum ResourceWatcherFSM::ChangeAutoStartupWithExe(bool resetExplorer)
+ErrorCodeEnum ResourceWatcherFSM::ChangeAutoStartupWithExe(bool resetVBS, bool resetExplorer)
 {
     const char* exploreExe = "explorer.exe";
     ErrorCodeEnum result(Error_Succeed);
@@ -1771,12 +1820,18 @@ ErrorCodeEnum ResourceWatcherFSM::ChangeAutoStartupWithExe(bool resetExplorer)
     {
         result = GetEntityBase()->GetFunction()->GetPath("RootVer", exePath);
         if (exePath.IsNullOrEmpty() || result != Error_Succeed) {
-            DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("Get RootVer path failed: %d", result);
+			LogWarn(Severity_Middle, Error_Unexpect, LOG_WARN_UPDATE_AUTO_STARTUP_WITH_EXE_FAILED
+				, CSimpleStringA::Format("Get RootVer path failed: %d", result));
             return Error_Unexpect;
         }
-        exePath.Append("\\VTM.exe");
+        if (!resetVBS)
+            exePath.Append("\\VTM.exe");
+        else 
+            exePath.Append("\\spexplorerfast.vbs");
+
         if (!ExistsFileA(exePath)) {
-            DbgWithLink(LOG_LEVEL_WARN, LOG_TYPE_SYSTEM)("[%s] is not existed!", exePath.GetData());
+			LogWarn(Severity_Middle, Error_Unexpect, LOG_WARN_UPDATE_AUTO_STARTUP_WITH_EXE_FAILED
+				, CSimpleStringA::Format("[%s] is not existed!", exePath.GetData()));
             return Error_NotExist;
         }
     }
@@ -1813,22 +1868,24 @@ ErrorCodeEnum ResourceWatcherFSM::ChangeAutoStartupWithExe(bool resetExplorer)
     return result;
 }
 
-void ResourceWatcherFSM::InitialAutoStartupSetType()
+int ResourceWatcherFSM::InitialAutoStartupSetType()
 {
+    int ret = 0;
     CSmartPointer<IConfigInfo> spConfig;
     GetEntityBase()->GetFunction()->OpenConfig(Config_CenterSetting, spConfig);
     int value(0);
     spConfig->ReadConfigValueInt(GetEntityBase()->GetEntityName(), "AutoStartCMD", value);
     if (value != 0) {
-        m_forceStartupWithExeFlag = value;
-        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Get AutoStartCMD from CS: %d", m_forceStartupWithExeFlag);
+        ret = value;
+        DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Get AutoStartCMD from CS: %d", ret);
     }
+    return ret;
 }
 
-BOOL ResourceWatcherFSM::IsHasSetAutoStartupByFolder()
+BOOL ResourceWatcherFSM::IsHasSetAutoStartupByFolder(CSimpleStringA& strPath)
 {
     BOOL result(FALSE);
-
+    strPath.Clear();
     const char* STARTUP_DIR_FULL_PATH = "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp";
 
 #ifdef DEVOPS_ON_ST /*DevOps流水线编译,ST环境*/
@@ -1846,23 +1903,32 @@ BOOL ResourceWatcherFSM::IsHasSetAutoStartupByFolder()
         DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("[%s] dir is not exist!", STARTUP_DIR_FULL_PATH);
         return result;
     }
+    strPath = STARTUP_DIR_FULL_PATH;
+	strPath += "\\";
+	strPath += CMB_LINK_FILE_NAME;
 
-    auto arr = fileutil_get_sub_files(STARTUP_DIR_FULL_PATH);
-    if (arr != NULL) {
-        for (int i = 0; i < arr->nelts; ++i) {
-            char* file = ARRAY_IDX(arr, i, char*);
-            char* filename = strrchr(file, '\\');
-            if (filename != NULL) { filename += 1; }
-            DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("autostartup[%s]", filename);
-            if (filename != NULL/* && strcmp(filename, CMB_LINK_FILE_NAME) == 0*/) {
-                CSimpleStringA strfilename(filename);
-                if (strfilename.IsStartWith("招商银行可视柜台") && strfilename.IsEndWith(".lnk")) {
-                    result = TRUE;
-                    break;
-                }
-            }
-        }
-        toolkit_array_free2(arr);
+    if (ExistsFileA(strPath)) {
+        result = TRUE;
+    }
+    else {
+		auto arr = fileutil_get_sub_files(STARTUP_DIR_FULL_PATH);
+		if (arr != NULL) {
+			for (int i = 0; i < arr->nelts; ++i) {
+				char* file = ARRAY_IDX(arr, i, char*);
+				char* filename = strrchr(file, '\\');
+				if (filename != NULL) { filename += 1; }
+				DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("autostartup[%s]", filename);
+				if (filename != NULL/* && strcmp(filename, CMB_LINK_FILE_NAME) == 0*/) {
+					CSimpleStringA strfilename(filename);
+					if (strfilename.IsStartWith("招商银行可视柜台") && strfilename.IsEndWith(".lnk")) {
+						strPath = file;
+						result = TRUE;
+						break;
+					}
+				}
+			}
+			toolkit_array_free2(arr);
+		}
     }
     return result;
 }
@@ -1917,7 +1983,7 @@ void ResourceWatcherFSM::DetectVersionHasChangedAndWarn()
     }
 }
 
-void ResourceWatcherFSM::DetectDesktopFileAndWarn()
+void ResourceWatcherFSM::DetectDestopFileAndWarn(bool bClear, CSimpleStringA& strFileSaveList)
 {
     const DWORD INFO_BUFFER_SIZE = 2048;
     char infoBuf[INFO_BUFFER_SIZE];
@@ -1936,47 +2002,72 @@ void ResourceWatcherFSM::DetectDesktopFileAndWarn()
     }
     else
     {
+		CSimpleStringA filelist(true);
+		int dirCount(0), fileCount(0);
         DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("User name:          %s", infoBuf);
         CSimpleStringA desktopFullPath = CSimpleStringA::Format("C:\\Users\\%s\\Desktop", infoBuf);
-        auto arr = fileutil_get_sub_files(desktopFullPath);
-        CSimpleStringA filelist(true);
-        int dirCount(0), fileCount(0);
-        if (arr != NULL) {
-            for (int i = 0; i < arr->nelts; ++i) {
-                char* file = ARRAY_IDX(arr, i, char*);
-                char* filename = strrchr(file, '\\');
-                if (filename != NULL) { filename += 1; }
-                else { filename = file; }
-                fileCount++;
-                if (!filelist.IsNullOrEmpty()) {
-                    filelist += "|";
-                }
-                filelist += filename;
-            }
-            toolkit_array_free2(arr);
-        }
-
-        filelist += ";";
-        arr = fileutil_get_sub_dirs(desktopFullPath);
-        if (arr != NULL) {
-            for (int i = 0; i < arr->nelts; ++i) {
-                char* dir = ARRAY_IDX(arr, i, char*);
-                char* dirname = strrchr(dir, '\\');
-                if (dirname != NULL) { dirname += 1; }
-                else { dirname = dir; }
-                dirCount++;
-                if (!filelist.IsNullOrEmpty() && i != 0) {
-                    filelist += "|";
-                }
-                filelist += dirname;
-            }
-            toolkit_array_free2(arr);
-        }
-        if (fileCount + dirCount > 0) {
-			LogWarn(Severity_Low, Error_Debug, LOG_INFO_DESKTOP_FILESTATUS, CSimpleStringA::Format(
-				"%s's deskop: file(%d),dir(%d), list:(%s)", infoBuf, fileCount, dirCount,
-				filelist.GetLength() < 950 ? filelist.GetData() : (filelist.SubString(0, 950) + "....").GetData()));
+        CSimpleStringA desktopPublicPath("C:\\Users\\Public\\Desktop");
+        CAutoArray<CSimpleStringA> desktopPaths;
+        desktopPaths.Init(2);
+        desktopPaths[0] = desktopFullPath;
+        desktopPaths[1] = desktopPublicPath;
+        for (int i = 0; i < desktopPaths.GetCount(); ++i) {
+            CSimpleStringA& curPath = desktopPaths[i];
+			auto arr = fileutil_get_sub_files(curPath);
+			if (arr != NULL) {
+				for (int i = 0; i < arr->nelts; ++i) {
+					char* file = ARRAY_IDX(arr, i, char*);
+					char* filename = strrchr(file, '\\');
+					if (filename != NULL) { filename += 1; }
+					else { filename = file; }
+					fileCount++;
+					if (!filelist.IsNullOrEmpty()) {
+						filelist += "|";
+					}
+					filelist += filename;
+					if (bClear) {
+						std::string strLowFileName = SP::Utility::ToLower(std::string(filename));
+						if (strFileSaveList.IsNullOrEmpty() || strFileSaveList.IndexOf(strLowFileName.c_str()) == -1) {
+							DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("delete desktop file:%s", filename);
+							RemoveFileA(file);
+						}
+						else {
+							DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("skip to delete: %s", filename);
+						}
+					}
+				}
+				if (arr->nelts > 0) {
+					filelist += ";";
+				}
+				toolkit_array_free2(arr);
+			}
+
+			arr = fileutil_get_sub_dirs(curPath);
+			if (arr != NULL) {
+				for (int i = 0; i < arr->nelts; ++i) {
+					char* dir = ARRAY_IDX(arr, i, char*);
+					char* dirname = strrchr(dir, '\\');
+					if (dirname != NULL) { dirname += 1; }
+					else { dirname = dir; }
+					dirCount++;
+					if (!filelist.IsNullOrEmpty() && i != 0) {
+						filelist += "|";
+					}
+					filelist += dirname;
+					if (bClear) {
+						DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("remove desktop dir:%s", dirname);
+						RemoveDirRecursiveA(dir);
+					}
+				}
+				if (arr->nelts > 0) {
+					filelist += ";";
+				}
+				toolkit_array_free2(arr);
+			}
         }
+        LogWarn(Severity_Low, Error_Debug, LOG_INFO_DESKTOP_FILESTATUS
+            ,CSimpleStringA::Format("{\"subject\":\"desktop_file\",\"username\":\"%s\",\"file_count\":%d,\"dir_count\":%d,\"content\":\"%s\"}"
+				, infoBuf, fileCount, dirCount,filelist.GetLength() < 950 ? filelist.GetData() : (filelist.SubString(0, 950) + "....").GetData()));
     }
 }
 
@@ -2259,7 +2350,9 @@ void ResourceWatcherFSM::VerifySignature(const CSimpleStringA& filePath)
             string strFileName = fileName;
             string strFilePath;
 
-            if (strFileName.find(".dll") == string::npos && strFileName.find(".exe") == string::npos)
+            if(strFileName.empty() 
+                || (strFileName.rfind(".dll") != strFileName.length() - 4 
+                    && strFileName.rfind(".exe") != strFileName.length() - 4))
                 continue;
 
             strFilePath = strDirPath;

+ 6 - 7
Module/mod_ResourceWatcher/ResourceWatcherFSM.h

@@ -295,7 +295,6 @@ public:
 	void DeleteVideoFiles();
 	int ProcessFileDelete(LPCTSTR lpszPath, int& nDelSucCnt, int& nDelFailedCnt, bool delDir, unsigned int saveBackDay = 0);
 
-	// Add Ad0 folder job [4/2/2018 10:53 @Gifur]
 	BOOL GetSystemBootTime(CSmallDateTime& systemBootTime);
     BOOL DetectIsFirstRunAtBoot();
 
@@ -336,15 +335,15 @@ public:
 	//0:explorer.exe
 	//1:vbs
 	//2:vtm.exe
+	//3:startmenu lnk
 	//-1:failed
-	//-2:do before	 in day
-	void DetectAutoStartup(int& vbsType);
-	ErrorCodeEnum ChangeAutoStartupWithExe(bool resetExplorer = false);
-	void InitialAutoStartupSetType();
+	int DetectAutoStartupType();
+	ErrorCodeEnum ChangeAutoStartupWithExe(bool resetVBS = false, bool resetExplorer = false);
+	int InitialAutoStartupSetType();
 
-	BOOL IsHasSetAutoStartupByFolder();
+	BOOL IsHasSetAutoStartupByFolder(CSimpleStringA& strPath);
 	void DetectVersionHasChangedAndWarn();
-	void DetectDesktopFileAndWarn();
+	void DetectDestopFileAndWarn(bool bClear, CSimpleStringA& strFileSaveList);
 	ErrorCodeEnum DetectVTMInstalledBySetup(BOOL& fYes);
 
 	void DetectVersionHasChangedAndWarnCover()

+ 5 - 3
Module/mod_ResourceWatcher/ResourceWatcher_UserCode.h

@@ -53,12 +53,14 @@
 #define LOG_INFO_DEVICE_SMBIOS_GET	0x50A00037
 
 #define LOG_WARN_VER_DELETE	0x50A00040
-#define LOG_WARN_AUTO_STARTUP_FROM_REGIST 0x50A00041 //vbs自启动
-#define LOG_WARN_NOT_AUTO_STARTUP_FROM_REGIST 0x50A00042
+#define LOG_WARN_AUTO_STARTUP_FROM_REGIST 0x50A00041 //注册VBS自启动
+#define LOG_WARN_NOT_AUTO_STARTUP_FROM_REGIST 0x50A00042 //注册表未注册自启动(默认是explorer.exe)
 #define LOG_WARN_CHECK_AUTO_STARTUP_FROM_REGIST_FAILED 0x50A00043
-#define LOG_WARN_CHECK_AUTO_STARTUP_WITH_EXE 0x50A00044  //exe自启动
+#define LOG_WARN_CHECK_AUTO_STARTUP_WITH_EXE 0x50A00044//注册VTM.exe自启动
 #define LOG_WARN_UPDATE_AUTO_STARTUP_WITH_EXE_SUCC 0x50A00045
 #define LOG_WARN_UPDATE_AUTO_STARTUP_WITH_EXE_FAILED 0x50A00046
+#define LOG_WARN_CHECK_AUTO_STARTUP_UNKNOWN 0x50A00047 //注册表未知内容
+#define LOG_WARN_CHECK_AUTO_STARTUP_WITH_STARTMENU 0x50A00048 //开始菜单里设置开机自启动
 
 #define LOG_WARN_GET_FILE_CONTENT 0x50A00050
 #define LOG_WARN_READ_FILE_INFO 0x50A00051