| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427 |
- // WatchService.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include "psapi.h"
- #include <tlhelp32.h>
- #include "Global.h"
- #include "..\ChineseRes\ChineseRes\resource.h"
- #pragma comment ( lib, "psapi.lib" )
- const VER_WIN2000_PRO = 1;
- const VER_WIN2000_SRV = 2;
- const VER_WIN2000_ADVANCE_SRV = 3;
- const VER_WIN_XP = 4;
- const VER_WIN2003 = 5;
- const VER_WINNT = 6;
- const VER_VISA_UP = 7;
- const VER_OTHER = 8;
- const BUFSIZE = 1024;
- //定义全局函数变量
- int g_nWindowsVer = VER_OTHER;
- void Init();
- BOOL IsInstalled();
- BOOL Install();
- BOOL Uninstall();
- void WINAPI ServiceMain();
- void WINAPI ServiceStrl(DWORD dwOpcode);
- void LogEvent(LPCTSTR pFormat, ...);
- int FindProcessCount(char *strProcessName);
- DWORD FindAndKillProcess(char *strProcessName);
- void KillProcess(DWORD dwProcess);
- int GetSysData();
- INT GetWindowVersion();
- SERVICE_STATUS_HANDLE g_hServiceStatus;
- SERVICE_STATUS g_status;
- DWORD dwThreadID;
- BOOL InitWatchService();
- void UnInitWatchService();
- HANDLE g_hRunObject = NULL;
- HANDLE g_hWatchThread = NULL;
- DWORD WINAPI ReConnectTwoShipperServerThread( void *pData );
- DWORD WINAPI ReConnectWatchSrvThread( void *pData );
- HANDLE g_hReConnectWatchSrvThread = NULL;
- HANDLE g_hReConnectTwoShipperServerThread = NULL;
- DWORD WINAPI BackupDBThread( void *pData );
- HANDLE g_hBackupDBThread = NULL;
- char g_strWatchDirectory[MAX_PATH]={0};
- CHAR g_strAppName[MAX_PATH] = {0}; // 软件名称
- char g_strVirComDir[MAX_PATH] = {0};
- HINSTANCE g_hLangDLL;
- int _tmain(int argc, _TCHAR* argv[])
- {
- GetSysData();
- CHAR szPath[MAX_PATH] = {0};
- int nProcessCount = 0;
- memset(szPath, 0, sizeof(szPath));
- strcpy(szPath, g_strWatchDirectory);
- strcat(szPath, "\\WatchService.exe");
- // 进程存在,直接退出
- nProcessCount = FindProcessCount(szPath);
- if( nProcessCount > 1 )
- {
- return 0;
- }
- Init();
- dwThreadID = ::GetCurrentThreadId();
- SERVICE_TABLE_ENTRY st[] =
- {
- { g_szServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain },
- { NULL, NULL }
- };
- if(argc > 1)
- {
- if (stricmp((char *)argv[1], "/install") == 0)
- {
- Install();
- }
- else if (stricmp((char *)argv[1], "/uninstall") == 0)
- {
- Uninstall();
- }
- else
- {
- if (!::StartServiceCtrlDispatcher(st))
- {
- LogEvent(_T("Register Service Main Function Error!"));
- }
- }
- }
- else
- {
- if (!::StartServiceCtrlDispatcher(st))
- {
- LogEvent(_T("Register Service Main Function Error!"));
- }
- }
- return 0;
- }
- INT GetWindowVersion()
- {
- int nResult = VER_OTHER;
- OSVERSIONINFOEX osvi;
- BOOL bOsVersionInfoEx;
- // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
- // If that fails, try using the OSVERSIONINFO structure.
- ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
- if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
- {
- osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
- if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
- return -1;
- }
- switch (osvi.dwPlatformId)
- {
- // Test for the Windows NT product family.
- case VER_PLATFORM_WIN32_NT:
- // Test for the specific product family.
- if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
- {
- nResult = VER_WIN2003;
- printf ("Microsoft Windows Server 2003 family, ");
- }
- if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
- {
- nResult = VER_WIN_XP;
- printf ("Microsoft Windows XP ");
- }
- if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
- {
- nResult = VER_WIN2000_PRO;
- printf ("Microsoft Windows 2000 ");
- }
- if ( osvi.dwMajorVersion <= 4 )
- {
- nResult = VER_WINNT;
- printf("Microsoft Windows NT ");
- }
- // Test for specific product on Windows NT 4.0 SP6 and later.
- if( bOsVersionInfoEx )
- {
- // Test for the workstation type.
- if ( osvi.wProductType == VER_NT_WORKSTATION )
- {
- if( osvi.dwMajorVersion == 4 )
- printf ( "Workstation 4.0 " );
- else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
- printf ( "Home Edition " );
- else
- printf ( "Professional " );
- }
- // Test for the server type.
- else if ( osvi.wProductType == VER_NT_SERVER )
- {
- if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
- {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- printf ( "Datacenter Edition " );
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- printf ( "Enterprise Edition " );
- else if ( osvi.wSuiteMask == VER_SUITE_BLADE )
- printf ( "Web Edition " );
- else
- printf ( "Standard Edition " );
- }
- else if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
- {
- if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
- {
- printf ( "Datacenter Server " );
- }
- else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- {
- nResult = VER_WIN2000_ADVANCE_SRV;
- printf ( "Advanced Server " );
- }
- else
- {
- nResult = VER_WIN2000_SRV;
- printf ( "Server " );
- }
- }
- else // Windows NT 4.0
- {
- if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
- printf ("Server 4.0, Enterprise Edition " );
- else
- printf ( "Server 4.0 " );
- }
- }
- }
- else // Test for specific product on Windows NT 4.0 SP5 and earlier
- {
- HKEY hKey;
- char szProductType[BUFSIZE];
- DWORD dwBufLen=BUFSIZE;
- LONG lRet;
- lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
- "SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
- 0, KEY_QUERY_VALUE, &hKey );
- if( lRet != ERROR_SUCCESS )
- return FALSE;
- lRet = RegQueryValueEx( hKey, "ProductType", NULL, NULL,
- (LPBYTE) szProductType, &dwBufLen);
- if( (lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE) )
- return FALSE;
- RegCloseKey( hKey );
- if ( lstrcmpi( "WINNT", szProductType) == 0 )
- printf( "Workstation " );
- if ( lstrcmpi( "LANMANNT", szProductType) == 0 )
- printf( "Server " );
- if ( lstrcmpi( "SERVERNT", szProductType) == 0 )
- printf( "Advanced Server " );
- printf( "%d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion );
- }
- // Display service pack (if any) and build number.
- if( osvi.dwMajorVersion == 4 &&
- lstrcmpi( osvi.szCSDVersion, "Service Pack 6" ) == 0 )
- {
- HKEY hKey;
- LONG lRet;
- // Test for SP6 versus SP6a.
- lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
- "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Hotfix\\Q246009",
- 0, KEY_QUERY_VALUE, &hKey );
- if( lRet == ERROR_SUCCESS )
- printf( "Service Pack 6a (Build %d)\n", osvi.dwBuildNumber & 0xFFFF );
- else // Windows NT 4.0 prior to SP6a
- {
- printf( "%s (Build %d)\n",
- osvi.szCSDVersion,
- osvi.dwBuildNumber & 0xFFFF);
- }
- RegCloseKey( hKey );
- }
- else // Windows NT 3.51 and earlier or Windows 2000 and later
- {
- printf( "%s (Build %d)\n",
- osvi.szCSDVersion,
- osvi.dwBuildNumber & 0xFFFF);
- }
- break;
- // Test for the Windows 95 product family.
- case VER_PLATFORM_WIN32_WINDOWS:
- if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
- {
- printf ("Microsoft Windows 95 ");
- if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
- printf("OSR2 " );
- }
- if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
- {
- printf ("Microsoft Windows 98 ");
- if ( osvi.szCSDVersion[1] == 'A' )
- printf("SE " );
- }
- if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
- {
- printf ("Microsoft Windows Millennium Edition\n");
- }
- break;
- case VER_PLATFORM_WIN32s:
- printf ("Microsoft Win32s\n");
- break;
- }
- return nResult;
- }
- void ReStartProcess(char *pPath)
- {
- PROCESS_INFORMATION pi;
- STARTUPINFO sti;
- ZeroMemory(&sti,sizeof(sti));
- sti.cb=sizeof(sti);
- sti.lpDesktop="winsta0\\default";
- CreateProcess(pPath,NULL,NULL,NULL,FALSE,0,NULL,NULL,&sti,&pi);
- }
- void StartIOService()
- {
- // 打开服务管理对象
- SC_HANDLE hSC = ::OpenSCManager( NULL,
- NULL, GENERIC_EXECUTE);
- if( hSC == NULL)
- {
- return;
- }
- // 打开www服务。
- SC_HANDLE hSvc = ::OpenService( hSC, "eBus-CMS IO Service",
- SERVICE_START | SERVICE_QUERY_STATUS | SERVICE_STOP);
- if( hSvc == NULL)
- {
- ::CloseServiceHandle( hSC);
- return;
- }
- // 获得服务的状态
- SERVICE_STATUS status;
- if( ::QueryServiceStatus( hSvc, &status) == FALSE)
- {
- ::CloseServiceHandle( hSvc);
- ::CloseServiceHandle( hSC);
- return;
- }
- //如果处于停止状态则启动服务,否则停止服务。
- if( status.dwCurrentState == SERVICE_RUNNING)
- {
- return;
- }
- else if( status.dwCurrentState == SERVICE_STOPPED)
- {
- // 启动服务
- if( ::StartService( hSvc, NULL, NULL) == FALSE)
- {
- ::CloseServiceHandle( hSvc);
- ::CloseServiceHandle( hSC);
- return;
- }
- // 等待服务启动
- while( ::QueryServiceStatus( hSvc, &status) == TRUE)
- {
- ::Sleep( status.dwWaitHint);
- if( status.dwCurrentState == SERVICE_RUNNING)
- {
- ::CloseServiceHandle( hSvc);
- ::CloseServiceHandle( hSC);
- return;
- }
- }
- }
- ::CloseServiceHandle( hSvc);
- ::CloseServiceHandle( hSC);
- return;
- }
- void StopIOService()
- {
- }
- //将进程名转换为PID的函数
- DWORD ProcessToPID(char* InputProcessName)
- {
- DWORD aProcesses[1024], cbNeeded, cProcesses;
- unsigned int i;
- HANDLE hProcess;
- HMODULE hMod;
- char szProcessName[MAX_PATH] = "UnknownProcess";
- // 计算目前有多少进程, aProcesses[]用来存放有效的进程PIDs
- if( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return 0;
-
- cProcesses = cbNeeded / sizeof(DWORD);
-
- // 按有效的PID遍历所有的进程
- for( i = 0; i < cProcesses; i++ )
- {
- // 打开特定PID的进程
- hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);
- // 取得特定PID的进程名
- if( hProcess )
- {
- if( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
- {
- GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) );
-
- //LogEvent("得到的进程名%s", szProcessName);
- //将取得的进程名与输入的进程名比较,如相同则返回进程PID
- if(!_stricmp(szProcessName, InputProcessName))
- {
- CloseHandle( hProcess );
- DWORD dwSessionID = 0;
- ProcessIdToSessionId( aProcesses[i], &dwSessionID );
- if( dwSessionID != 0 )
- {
- KillProcess( aProcesses[i] );
- LogEvent("删除远程桌面用户串口服务器进程!");
- }
- //return aProcesses[i];
- }
- }
- }//end of if ( hProcess )
- }//end of for
- //没有找到相应的进程名,返回0
- CloseHandle( hProcess );
- return 0;
- }//end of ProcessToPID
- DWORD WINAPI WatchThreadProc(void *pPara)
- {
- CHAR szPath[MAX_PATH] = {0};
- int nProcessCount = 0;
- do
- {
- if( g_nWindowsVer == VER_WIN2000_ADVANCE_SRV || g_nWindowsVer == VER_WIN2000_SRV
- || g_nWindowsVer == VER_WIN2003 )
- {
- #if 0
- //LogEvent("Win2003系统");
- memset(szPath, 0, sizeof(szPath));
- strcpy(szPath, g_strVirComDir);
- //关闭远程桌面进程
- ProcessToPID("VComManage.exe");
-
- nProcessCount = FindProcessCount(szPath);
- if( nProcessCount > 1 )
- {
- // 指定桌面,要不看不到界面
- // 等待桌面进程成功以后再指定桌面
- nProcessCount = FindProcessCount("C:\\WINDOWS\\system32\\explorer.exe");
- while( nProcessCount <= 0 )
- {
- nProcessCount = FindProcessCount("C:\\WINDOWS\\system32\\explorer.exe");
- }
- ReStartProcess(szPath);
- Sleep(10000); // 等待串口服务器转发成功
- }
- #endif
-
- }
- if( g_nRunModeForIOServer==0 )
- {
- Sleep( 3000 );
- continue;
- }
- memset(szPath, 0, sizeof(szPath));
- strcpy(szPath, g_strWatchDirectory);
- strcat(szPath, "\\IOServer.exe");
- // 进程存在,直接退出
- #if 1
- nProcessCount = FindProcessCount(szPath);
- if( nProcessCount == 0 )
- {
- Sleep(5000); //等待5秒,再启动
- StartIOService();
- //ShellExecute(NULL, "open", szPath, NULL, NULL, SW_SHOWNORMAL);
- // 指定桌面,要不看不到界面
- //ReStartProcess(szPath);
- }
- else if( nProcessCount > 1 )
- {
- FindAndKillProcess(szPath);
- LogEvent("删除IO服务器进程!");
- Sleep(5000); //等待5秒,再启动
- StartIOService();
- //ShellExecute(NULL, "open", szPath, NULL, NULL, SW_SHOWNORMAL);
- // 指定桌面,要不看不到界面
- //ReStartProcess(szPath);
- }
- #endif
- }while( WaitForSingleObject( g_hRunObject, 1250L ) == WAIT_TIMEOUT );
- return 0;
- }
- DWORD __stdcall INTER_GetExplorerToken(OUT PHANDLE phExplorerToken )
- {
- DWORD dwStatus = ERROR_FILE_NOT_FOUND ;
- BOOL bRet = FALSE ;
- HANDLE hProcess = NULL ;
- HANDLE hProcessSnap = NULL ;
- char szExplorerPath[MAX_PATH] = { 0 } ;
- char FileName[MAX_PATH] = { 0 } ;
- PROCESSENTRY32 pe32 = { 0 } ;
- __try
- {
- GetWindowsDirectory( szExplorerPath , MAX_PATH ) ;
- strcat( szExplorerPath , "\\Explorer.EXE" ) ;
- hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS , 0 ) ;
- if( hProcessSnap == INVALID_HANDLE_VALUE )
- {
- dwStatus = GetLastError() ;
- __leave ;
- }
- pe32.dwSize = sizeof( PROCESSENTRY32 ) ;
- if( !Process32First( hProcessSnap, &pe32 ))
- {
- dwStatus = GetLastError() ;
- __leave ;
- }
- do {
- hProcess = OpenProcess(
- PROCESS_ALL_ACCESS ,
- FALSE ,
- pe32.th32ProcessID ) ;
- if( NULL != hProcess )
- {
- DWORD (__stdcall *GMFNE)(HANDLE hProcess,
- HMODULE hModule,
- LPTSTR lpFilename,
- DWORD nSize);
- HMODULE hPsapi=LoadLibrary("PSAPI");
- if ( ! hPsapi )
- {
- dwStatus = GetLastError() ;
- break ;
- }
- GMFNE=(DWORD (__stdcall *) (HANDLE, HMODULE,LPTSTR,DWORD))GetProcAddress(hPsapi,"GetModuleFileNameExA");
- if ( GMFNE(hProcess , NULL , FileName , MAX_PATH) )
- {
- if( !strcmpi( FileName , szExplorerPath ))
- {
- HANDLE hToken ;
- if( OpenProcessToken( hProcess , TOKEN_ALL_ACCESS , &hToken ))
- {
- * phExplorerToken = hToken ;
- dwStatus = 0 ;
- }
- break ;
- }
- }
- CloseHandle ( hProcess ) ;
- hProcess = NULL ;
- }
-
- } while( Process32Next( hProcessSnap, &pe32 )) ;
- }
- __finally
- {
- if( NULL != hProcess )
- {
- CloseHandle( hProcess ) ;
- }
- if( NULL != hProcessSnap )
- {
- CloseHandle ( hProcessSnap ) ;
- }
- }
- return dwStatus ;
- }
- BOOL FolderExist(CString strPath)
- {
- WIN32_FIND_DATA wfd;
- BOOL rValue = FALSE;
- HANDLE hFind = FindFirstFile(strPath, &wfd);
- if( (hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
- {
- rValue = TRUE;
- }
- FindClose(hFind);
-
- return rValue;
- }
- int CreateBat( CString sDBBackName )
- {
- CHAR strFile[MAX_PATH + 1] = "";
- CHAR strFileSave[MAX_PATH + 1] = "";
- CHAR strTemp[MAX_PATH + 1] = "";
- int iPosFile = 0;
- int iLenghtFile = 0;
- ////////////////////////////////////////////////////////////////////////////
- //获取应用名
- GetModuleFileName(NULL, g_strWatchDirectory, MAX_PATH);
- iLenghtFile = (int)strlen(g_strWatchDirectory);
- for (iPosFile = iLenghtFile - 1; iPosFile >= 0; iPosFile--)
- {
- if (g_strWatchDirectory[iPosFile] == '\\')
- {
- memset(g_strAppName, 0, sizeof(g_strAppName));
- memcpy(g_strAppName, g_strWatchDirectory + iPosFile + 1, iLenghtFile - iPosFile - 1);
- break;
- }
- }
-
- iLenghtFile = (int)strlen(g_strWatchDirectory);
- for (iPosFile = iLenghtFile - 1; iPosFile >= 0; iPosFile--)
- {
- if (g_strWatchDirectory[iPosFile] == '\\')
- {
- g_strWatchDirectory[iPosFile] = '\0';
- break;
- }
- }
- wsprintf(strFile, "%s\\set.ini", g_strWatchDirectory);
- wsprintf(strFileSave, "%s\\backupDB.bat", g_strWatchDirectory);
- DeleteFile( strFileSave );
- CString sDBName,sDBPwd,sTemp;
- //数据库名称
- GetPrivateProfileString("Database", "DataBaseName", "", strTemp, sizeof(strTemp), strFile);
- sDBName = strTemp;
- //数据库密码
- GetPrivateProfileString("Database", "Password", "", strTemp, sizeof(strTemp), strFile);
- sDBPwd = strTemp;
- CStdioFile MyFile;
- if(!MyFile.Open(strFileSave,CFile::modeWrite))
- MyFile.Open(strFileSave,CFile::modeCreate|CFile::modeWrite);
- MyFile.WriteString("set PGHOME=C:\\Program Files\\PostgreSQL\\8.3\n");
- MyFile.WriteString("set PGDATA=%PGHOME%\\data\n");
- MyFile.WriteString("set PGLIB=%PGHOME%\\lib\n");
- MyFile.WriteString("set PGHOST=localhost\n");
- MyFile.WriteString("set PATH=%PGHOME%\\bin;%PATH%\n");
- sTemp.Format("set PGPASSWORD=%s\n",sDBPwd );
- MyFile.WriteString(sTemp);
- sTemp.Format("pg_dump -F c -h localhost -U postgres %s >D:\\isP-CMS\\Datebase\\%s.backup",sDBName,sDBBackName );
- MyFile.WriteString(sTemp);
- MyFile.Close();
- if (!FolderExist("D:\\isP-CMS"))
- {
- LOG4C_FUN( ( "D:\\isP-CMS" ));
- CreateDirectory("D:\\isP-CMS", NULL);
- }
- if (!FolderExist("D:\\isP-CMS\\Datebase"))
- CreateDirectory("D:\\isP-CMS\\Datebase", NULL);
- return 0;
- }
- BOOL InitWatchService()
- {
- CSocketHandle::InitLibrary( MAKEWORD(2,2) );
- MTVERIFY (g_hRunObject = ::CreateEvent(
- NULL, /* Security */
- TRUE, /* Manual event */
- 0, /* Clear on creation */
- "WatchService::g_hRunObject"));
- char szFileName[MAX_PATH];
- sprintf(szFileName, "%s\\log4crc", g_strWatchDirectory);
- ///设置日志配置文件名
- LOG4C_PARAM_CFG_FILE_NAME(szFileName);
- ///设置日志级别
- LOG4C_PARAM_LOG_LEVEL("LOG_ERROR");
- ///设置日志文件大小
- LOG4C_PARAM_LOG_FILE_SIZE(10240);
- ///设置生成日志文件个数,达到最大个数将自动覆盖最旧的日志
- LOG4C_PARAM_LOG_FILE_NUM(5);
- ///设置每次记录日志都重新读取日志配置文件
- LOG4C_PARAM_REREAD_LOG_CFG_FILE(1);
- ///带参数日志模块初始化,以上所有设置了的参数都将生效,没有设置的采用缺省值
- LOG4C_INIT_WITH_PARAM();
- //char strBuffer[128] = "You are the Best One!\0 Yes.";
- //LOG4C_HEX_DUMP((LOG_INFO, strBuffer, sizeof(strBuffer)));
- //LOG4C_ORIGIN ((LOG_ERROR,"LOG4C_ORIGIN"));
- //LOG4C_NO_FILENUM((LOG_ERROR, "LOG4C_NO_FILENUM"));
- ////LOG4C_RETURN_WITH_VALUE(( LOG4C_PRIORITY_TRACE, "message"), 1);
- //LOG4C_FUN(("Hello World!"));
- //LOG4C((LOG_ERROR, "Hello World!"));
- //LOG4C_IF((4>3, LOG_ERROR, "LOG4C_IF:4>3"));
- //LOG4C_IF((2>3, LOG_ERROR, "LOG4C_IF:2>3"));
- g_nWindowsVer = GetWindowVersion();
- //LOG4C_FUN( (g_strWatchDirectory ));
- //LOG4C_NO_FILENUM((LOG_NOTICE, "test"));
- //
- //LOG4C_NO_FILENUM_NO_LAYOUT((LOG_NOTICE, "test"));
- CString str;
- if( g_nTwoShipperIsServer==1 )
- str.Format( "%s %s %s",g_strTwoShipperServerIP,g_strTwoShipperServerPort,"服务器" );
- else
- str.Format( "%s %s %s",g_strTwoShipperServerIP,g_strTwoShipperServerPort,"客户端" );
- LOG4C_FUN( (str ));
- //LogEvent("系统版本=%d", g_nWindowsVer);
- DWORD dwThreadId;
- #if 1
- g_hWatchThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WatchThreadProc, NULL, 0, &dwThreadId);
- #endif
- // 连接IO服务器
- #if 0
- // 连接WatchService
- g_pWatchServerSocket = new CWatchServerSocket;
- if( !g_pWatchServerSocket->Connection(g_strWatchServerIP, g_strWatchServerPort) )
- {
- g_pWatchServerSocket->m_bSocket = FALSE;
- }
- else
- {
- g_pWatchServerSocket->m_bSocket = TRUE;
- for( int i = 0; i < MAX_DLL_TYPE; i++ )
- {
- g_dwServiceOnlineTick[i] = 0;
- }
- }
- if( g_hReConnectWatchSrvThread == NULL )
- {
- MTVERIFY( g_hReConnectWatchSrvThread = ::CreateThread(NULL, 0, ReConnectWatchSrvThread, 0, 0, 0) );
- }
- #endif
- if( g_hBackupDBThread == NULL )
- {
- MTVERIFY( g_hBackupDBThread = ::CreateThread(NULL, 0, BackupDBThread, 0, 0, 0) );
- }
- if( g_nTwoShipperIsServer==0 && g_hReConnectTwoShipperServerThread == NULL )
- {
- MTVERIFY( g_hReConnectTwoShipperServerThread = ::CreateThread(NULL, 0, ReConnectTwoShipperServerThread, 0, 0, 0) );
- }
- // 连接TwoShipper
- g_pTwoShipperSocket = new CTwoShipperSocket(g_nTwoShipperIsServer);
- switch( g_nTwoShipperIsServer )
- {
- case 0://客户端
- {
- if( !g_pTwoShipperSocket->DllC_LoginServer(g_strTwoShipperServerIP, g_strTwoShipperServerPort) )
- {
- LOG4C_FUN( ("Login Server fail" ));
- g_pTwoShipperSocket->m_bClientLoginServerSuccess = false;
- }
- else
- {
- LOG4C_FUN( ("Login Server Success" ));
- g_pTwoShipperSocket->m_bClientLoginServerSuccess = true;
- }
- }
- break;
- case 1://服务器
- {
- if( !g_pTwoShipperSocket->DllS_StartServer( g_strTwoShipperServerPort) )
- {
- LOG4C_FUN( ("Start Server fail" ));
- }
- else
- LOG4C_FUN( ("Start Server Success" ));
- }
- break;
- }
- while(g_status.dwCurrentState != SERVICE_STOP_PENDING)
- {
- Sleep(1000);
- }
- UnInitWatchService();
- return FALSE;
- }
- void UnInitWatchService()
- {
- //LogEvent("Watch Server Stop");
- if (g_hRunObject != NULL)
- MTVERIFY( SetEvent( g_hRunObject ) );
- if( g_pWatchServerSocket != NULL )
- {
- g_pWatchServerSocket->DisConnection();
- delete g_pWatchServerSocket;
- g_pWatchServerSocket = NULL;
- }
- if (g_hWatchThread != NULL)
- {
- MTVERIFY( WaitForSingleObject( g_hWatchThread, INFINITE ) != WAIT_FAILED );
- MTVERIFY( CloseHandle(g_hWatchThread) );
- g_hWatchThread = NULL;
- }
- if( g_hReConnectWatchSrvThread != NULL )
- {
- MTVERIFY( WaitForSingleObject( g_hReConnectWatchSrvThread, INFINITE ) != WAIT_FAILED );
- MTVERIFY( CloseHandle( g_hReConnectWatchSrvThread ) );
- g_hReConnectWatchSrvThread = NULL;
- }
- if( g_hReConnectTwoShipperServerThread != NULL )
- {
- MTVERIFY( WaitForSingleObject( g_hReConnectTwoShipperServerThread, INFINITE ) != WAIT_FAILED );
- MTVERIFY( CloseHandle( g_hReConnectTwoShipperServerThread ) );
- g_hReConnectTwoShipperServerThread = NULL;
- }
- LOG4C_FINI();
- }
- //*********************************************************
- //Functiopn: Init
- //Description: 初始化
- //Calls: main
- //Called By:
- //Table Accessed:
- //Table Updated:
- //Input:
- //Output:
- //Return:
- //Others:
- //History:
- // <author>niying <time>2006-8-10 <version> <desc>
- //*********************************************************
- void Init()
- {
- g_hServiceStatus = NULL;
- g_status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
- g_status.dwCurrentState = SERVICE_STOPPED;
- g_status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
- g_status.dwWin32ExitCode = 0;
- g_status.dwServiceSpecificExitCode = 0;
- g_status.dwCheckPoint = 0;
- g_status.dwWaitHint = 0;
- }
- //*********************************************************
- //Functiopn: ServiceMain
- //Description: 服务主函数,这在里进行控制对服务控制的注册
- //Calls:
- //Called By:
- //Table Accessed:
- //Table Updated:
- //Input:
- //Output:
- //Return:
- //Others:
- //History:
- // <author>niying <time>2006-8-10 <version> <desc>
- //*********************************************************
- void WINAPI ServiceMain()
- {
- // Register the control request handler
- g_status.dwCurrentState = SERVICE_START_PENDING;
- g_status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
- //注册服务控制
- g_hServiceStatus = RegisterServiceCtrlHandler(g_szServiceName, ServiceStrl);
- if (g_hServiceStatus == NULL)
- {
- LogEvent(_T("Handler not installed"));
- return;
- }
- SetServiceStatus(g_hServiceStatus, &g_status);
- g_status.dwWin32ExitCode = S_OK;
- g_status.dwCheckPoint = 0;
- g_status.dwWaitHint = 0;
- g_status.dwCurrentState = SERVICE_RUNNING;
- SetServiceStatus(g_hServiceStatus, &g_status);
- InitWatchService();
- g_status.dwCurrentState = SERVICE_STOPPED;
- SetServiceStatus(g_hServiceStatus, &g_status);
- LogEvent(_T("Service stopped"));
- }
- //*********************************************************
- //Functiopn: ServiceStrl
- //Description: 服务控制主函数,这里实现对服务的控制,
- // 当在服务管理器上停止或其它操作时,将会运行此处代码
- //Calls:
- //Called By:
- //Table Accessed:
- //Table Updated:
- //Input: dwOpcode:控制服务的状态
- //Output:
- //Return:
- //Others:
- //History:
- // <author>niying <time>2006-8-10 <version> <desc>
- //*********************************************************
- void WINAPI ServiceStrl(DWORD dwOpcode)
- {
- switch (dwOpcode)
- {
- case SERVICE_CONTROL_STOP:
- //UnInitIOService();
- g_status.dwCurrentState = SERVICE_STOP_PENDING;
- SetServiceStatus(g_hServiceStatus, &g_status);
- PostThreadMessage(dwThreadID, WM_CLOSE, 0, 0);
- break;
- case SERVICE_CONTROL_PAUSE:
- break;
- case SERVICE_CONTROL_CONTINUE:
- break;
- case SERVICE_CONTROL_INTERROGATE:
- break;
- case SERVICE_CONTROL_SHUTDOWN:
- UnInitWatchService();
- break;
- default:
- LogEvent(_T("Bad service request"));
- }
- }
- //*********************************************************
- //Functiopn: IsInstalled
- //Description: 判断服务是否已经被安装
- //Calls:
- //Called By:
- //Table Accessed:
- //Table Updated:
- //Input:
- //Output:
- //Return:
- //Others:
- //History:
- // <author>niying <time>2006-8-10 <version> <desc>
- //*********************************************************
- BOOL IsInstalled()
- {
- BOOL bResult = FALSE;
- //打开服务控制管理器
- SC_HANDLE hSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
- if (hSCM != NULL)
- {
- //打开服务
- SC_HANDLE hService = ::OpenService(hSCM, g_szServiceName, SERVICE_QUERY_CONFIG);
- if (hService != NULL)
- {
- bResult = TRUE;
- ::CloseServiceHandle(hService);
- }
- ::CloseServiceHandle(hSCM);
- }
- return bResult;
- }
- //*********************************************************
- //Functiopn: Install
- //Description: 安装服务函数
- //Calls:
- //Called By:
- //Table Accessed:
- //Table Updated:
- //Input:
- //Output:
- //Return:
- //Others:
- //History:
- // <author>niying <time>2006-8-10 <version> <desc>
- //*********************************************************
- BOOL Install()
- {
- if (IsInstalled())
- return TRUE;
- //打开服务控制管理器
- SC_HANDLE hSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
- if (hSCM == NULL)
- {
- //MessageBox(NULL, _T("Couldn't open service manager"), g_szServiceName, MB_OK);
- return FALSE;
- }
- // Get the executable file path
- TCHAR szFilePath[MAX_PATH];
- ::GetModuleFileName(NULL, szFilePath, MAX_PATH);
- //创建服务
- SC_HANDLE hService = ::CreateService(
- hSCM,
- g_szServiceName,
- g_szServiceName,
- SERVICE_ALL_ACCESS,
- SERVICE_WIN32_OWN_PROCESS,
- SERVICE_AUTO_START, //SERVICE_DEMAND_START,
- SERVICE_ERROR_NORMAL,
- szFilePath,
- NULL,
- NULL,
- _T(""),
- NULL,
- NULL);
- if( strcmp(g_strLanguage, "CHS") == 0 )
- {
- g_hLangDLL = ::LoadLibrary("ChineseRes.dll");
- }
- else if( strcmp(g_strLanguage, "CHT") == 0 )
- {
- g_hLangDLL = ::LoadLibrary("TaiwanRes.dll");
- }
- else if( strcmp(g_strLanguage, "ENG") == 0 )
- {
- g_hLangDLL = ::LoadLibrary("EnglishRes.dll");
- }
-
- AfxSetResourceHandle(g_hLangDLL);
- CString strServiceName;
- strServiceName.LoadString(IDS_WATCH_SERVICE_NAME);
- SERVICE_DESCRIPTION ServiceDesc;
- static TCHAR szDescription[MAX_PATH];
- _tcscpy(szDescription, strServiceName);
- ServiceDesc.lpDescription = szDescription;
- ::ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, &ServiceDesc);
- if (hService == NULL)
- {
- ::CloseServiceHandle(hSCM);
- //MessageBox(NULL, _T("Couldn't create service"), g_szServiceName, MB_OK);
- return FALSE;
- }
- ::CloseServiceHandle(hService);
- ::CloseServiceHandle(hSCM);
- return TRUE;
- }
- //*********************************************************
- //Functiopn: Uninstall
- //Description: 删除服务函数
- //Calls:
- //Called By:
- //Table Accessed:
- //Table Updated:
- //Input:
- //Output:
- //Return:
- //Others:
- //History:
- // <author>niying <time>2006-8-10 <version> <desc>
- //*********************************************************
- BOOL Uninstall()
- {
- if (!IsInstalled())
- return TRUE;
- SC_HANDLE hSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
- if (hSCM == NULL)
- {
- //MessageBox(NULL, _T("Couldn't open service manager"), g_szServiceName, MB_OK);
- return FALSE;
- }
- SC_HANDLE hService = ::OpenService(hSCM, g_szServiceName, SERVICE_STOP | DELETE);
- if (hService == NULL)
- {
- ::CloseServiceHandle(hSCM);
- //MessageBox(NULL, _T("Couldn't open service"), g_szServiceName, MB_OK);
- return FALSE;
- }
- SERVICE_STATUS g_status;
- ::ControlService(hService, SERVICE_CONTROL_STOP, &g_status);
- //删除服务
- BOOL bDelete = ::DeleteService(hService);
- ::CloseServiceHandle(hService);
- ::CloseServiceHandle(hSCM);
- if (bDelete)
- return TRUE;
- LogEvent(_T("Service could not be deleted"));
- return FALSE;
- }
- //
- // FindProcess
- // 这个函数唯一的参数是你指定的进程名,如:你的目标进程
- // 是 "Notepad.exe",返回值是该进程的ID,失败返回0
- //
- int FindProcessCount(char *strProcessName)
- {
- int nCount = 0;
- DWORD aProcesses[1024], cbNeeded, cbMNeeded;
- HMODULE hMods[1024];
- HANDLE hProcess;
- char szProcessName[MAX_PATH];
- if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
- return 0;
- for(int i=0; i< (int) (cbNeeded / sizeof(DWORD)); i++)
- {
- //_tprintf(_T("%d\t"), aProcesses[i]);
- hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);
- EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded);
- GetModuleFileNameEx( hProcess, hMods[0], szProcessName,sizeof(szProcessName));
-
- if(strstr(szProcessName, strProcessName))
- {
- //_tprintf(_T("%s;"), szProcessName);
- nCount++;
- }
- CloseHandle( hProcess );
- //_tprintf(_T("\n"));
- }
- return nCount;
- }
- //
- // Function: ErrorForce
- // 此函数中用上面的 FindProcess 函数获得你的目标进程的ID
- // 用WIN API OpenPorcess 获得此进程的句柄,再以TerminateProcess
- // 强制结束这个进程
- //
- VOID KillProcess(DWORD dwProcess)
- {
- // When the all operation fail this function terminate the "winlogon" Process for force exit the system.
- //HANDLE hTargetProcess = OpenProcess(PROCESS_QUERY_INFORMATION | // Required by Alpha
- // PROCESS_CREATE_THREAD | // For CreateRemoteThread
- // PROCESS_VM_OPERATION | // For VirtualAllocEx/VirtualFreeEx
- // PROCESS_VM_WRITE, // For WriteProcessMemory
- // FALSE, dwProcess);
- HANDLE hTargetProcess = OpenProcess(SYNCHRONIZE | PROCESS_TERMINATE,
- FALSE, dwProcess);
- if(hTargetProcess == NULL)
- {
- return;
- }
- TerminateProcess(hTargetProcess, 0);
- return;
- }
- //
- // FindProcess
- // 这个函数唯一的参数是你指定的进程名,如:你的目标进程
- // 是 "Notepad.exe",返回值是该进程的ID,失败返回0
- //
- DWORD FindAndKillProcess(char *strProcessName)
- {
- DWORD aProcesses[1024], cbNeeded, cbMNeeded;
- HMODULE hMods[1024];
- HANDLE hProcess;
- char szProcessName[MAX_PATH];
- if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return 0;
- for(int i=0; i< (int) (cbNeeded / sizeof(DWORD)); i++)
- {
- //_tprintf(_T("%d\t"), aProcesses[i]);
- hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]);
- EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded);
- GetModuleFileNameEx( hProcess, hMods[0], szProcessName,sizeof(szProcessName));
-
- if(strstr(szProcessName, strProcessName))
- {
- //_tprintf(_T("%s;"), szProcessName);
- KillProcess(aProcesses[i]);
- //return(aProcesses[i]);
- }
- //_tprintf(_T("\n"));
- }
- return 0;
- }
- int GetSysData()
- {
- CHAR strFile[MAX_PATH + 1] = "";
- CHAR strValue[MAX_PATH + 1] = "";
- int iPosFile = 0;
- int iLenghtFile = 0;
- ////////////////////////////////////////////////////////////////////////////
- //获取应用名
- GetModuleFileName(NULL, g_strWatchDirectory, MAX_PATH);
- iLenghtFile = (int)strlen(g_strWatchDirectory);
- for (iPosFile = iLenghtFile - 1; iPosFile >= 0; iPosFile--)
- {
- if (g_strWatchDirectory[iPosFile] == '\\')
- {
- memset(g_strAppName, 0, sizeof(g_strAppName));
- memcpy(g_strAppName, g_strWatchDirectory + iPosFile + 1, iLenghtFile - iPosFile - 1);
- break;
- }
- }
-
- iLenghtFile = (int)strlen(g_strWatchDirectory);
- for (iPosFile = iLenghtFile - 1; iPosFile >= 0; iPosFile--)
- {
- if (g_strWatchDirectory[iPosFile] == '\\')
- {
- g_strWatchDirectory[iPosFile] = '\0';
- break;
- }
- }
- wsprintf(strFile, "%s\\set.ini", g_strWatchDirectory);
- //是否自动启动系统
- GetPrivateProfileString("Other", "VirCom", "", g_strVirComDir, sizeof(g_strVirComDir), strFile);
- //WatchService
- GetPrivateProfileString("WatchServer", "ServerIP", "", g_strWatchServerIP, sizeof(g_strWatchServerIP), strFile);
- GetPrivateProfileString("WatchServer", "Port", "", g_strWatchServerPort, sizeof(g_strWatchServerPort), strFile);
- //WatchService
- GetPrivateProfileString("TwoShipperBackUp", "ServerIP", "", g_strTwoShipperServerIP, sizeof(g_strTwoShipperServerIP), strFile);
- GetPrivateProfileString("TwoShipperBackUp", "Port", "", g_strTwoShipperServerPort, sizeof(g_strTwoShipperServerPort), strFile);
- CHAR sTemp[MAX_PORT + 1];
- GetPrivateProfileString("TwoShipperBackUp", "IsInSlave", "", sTemp, sizeof(sTemp), strFile);
- g_nTwoShipperIsServer = atoi( sTemp );
- g_nRunModeForIOServer = (g_nTwoShipperIsServer+1)%2;
- //语言
- GetPrivateProfileString("Other", "Language", "", g_strLanguage, sizeof(g_strLanguage), strFile);
- //数据库备份
- GetPrivateProfileString("BackupDB", "BackType", "", sTemp, sizeof(sTemp), strFile);
- g_nDBBackType = atoi( sTemp );
- GetPrivateProfileString("BackupDB", "BackDate", "", sTemp, sizeof(sTemp), strFile);
- g_nDBBackDate = atoi( sTemp );
- GetPrivateProfileString("BackupDB", "BackTime", "", sTemp, sizeof(sTemp), strFile);
- g_nDBBackTime = atoi( sTemp );
- return 0;
- }
- DWORD WINAPI ReConnectWatchSrvThread( void *pData )
- {
- do
- {
- for( int i = 0; i < MAX_DLL_TYPE; i++ )
- {
- if( GetTickCount() - g_dwServiceOnlineTick[i] > 1 * 60 * 1000 &&
- g_dwServiceOnlineTick[i] != 0 ) //大于两分钟没有心跳包,认为已断线
- {
- g_pWatchServerSocket->m_bSocket = FALSE;
-
- CHAR szPath[MAX_PATH] = {0};
- memset(szPath, 0, sizeof(szPath));
- GetWindowsDirectory(szPath, MAX_PATH);
- strcat(szPath, "\\system32\\dwwin.exe");
- LogEvent("删除出错进程调试窗体!");
- FindAndKillProcess(szPath);
- memset(szPath, 0, sizeof(szPath));
- strcpy(szPath, g_strWatchDirectory);
- strcat(szPath, "\\IOServer.exe");
- LogEvent("删除出错进程,等待重启服务!");
- FindAndKillProcess(szPath);
- for( int j = 0; j < MAX_DLL_TYPE; j++ )
- {
- g_dwServiceOnlineTick[j] = 0;
- }
- break;
- }
- }
- if( g_pWatchServerSocket != NULL )
- {
- if( g_pWatchServerSocket->m_bSocket == FALSE )
- {
- g_pWatchServerSocket->DisConnection();
- LogEvent("重连IO Server");
- if( !g_pWatchServerSocket->Connection(g_strWatchServerIP, g_strWatchServerPort) )
- {
- g_pWatchServerSocket->m_bSocket = FALSE;
- }
- else
- {
- LogEvent("连接IO Server成功");
- g_pWatchServerSocket->m_bSocket = TRUE;
- for( int i = 0; i < MAX_DLL_TYPE; i++ )
- {
- g_dwServiceOnlineTick[i] = 0;
- }
- }
- }
- }
- }while( WaitForSingleObject( g_hRunObject, 1250L ) == WAIT_TIMEOUT );
- return 0;
- }
- DWORD WINAPI ReConnectTwoShipperServerThread( void *pData )
- {
- do
- {
- //if( g_pTwoShipperSocket->m_bClientLoginServerSuccess )
- //{
- // Sleep(1000);
- // continue;
- //}
- if( g_pTwoShipperSocket != NULL && !g_pTwoShipperSocket->m_bClientLoginServerSuccess )
- {
- g_pTwoShipperSocket->DllC_LogoutServer();
- if( !g_pTwoShipperSocket->DllC_LoginServer(g_strTwoShipperServerIP, g_strTwoShipperServerPort) )
- {
- CString str;
- str.Format("Login Server fail %s %s",g_strTwoShipperServerIP, g_strTwoShipperServerPort );
- LOG4C_FUN( (str ));
- g_pTwoShipperSocket->m_bClientLoginServerSuccess = false;
- }
- else
- {
- CString str;
- str.Format("Login Server Success %s %s",g_strTwoShipperServerIP, g_strTwoShipperServerPort );
- LOG4C_FUN( (str ));
- g_pTwoShipperSocket->m_bClientLoginServerSuccess = true;
- }
- }
- else if( g_pTwoShipperSocket != NULL )
- {
- g_pTwoShipperSocket = new CTwoShipperSocket(g_nTwoShipperIsServer);
- if( !g_pTwoShipperSocket->DllC_LoginServer(g_strTwoShipperServerIP, g_strTwoShipperServerPort) )
- {
- CString str;
- str.Format("Login Server fail %s %s",g_strTwoShipperServerIP, g_strTwoShipperServerPort );
- LOG4C_FUN( (str ));
- g_pTwoShipperSocket->m_bClientLoginServerSuccess = false;
- }
- else
- {
- CString str;
- str.Format("Login Server Success %s %s",g_strTwoShipperServerIP, g_strTwoShipperServerPort );
- LOG4C_FUN( (str ));
- g_pTwoShipperSocket->m_bClientLoginServerSuccess = true;
- }
- }
- }while( WaitForSingleObject( g_hRunObject, 1250L ) == WAIT_TIMEOUT );
- return 0;
- }
- DWORD WINAPI BackupDBThread( void *pData )
- {
- do
- {
- SYSTEMTIME st;
- GetLocalTime( &st );
- CString str;
- str.Format("%d-%d-%d",st.wYear,st.wMonth,st.wDay);
- LOG4C_FUN( ( str ));
- CHAR strFile[MAX_PATH + 1] = "";
- wsprintf(strFile, "%s\\backupDB.bat", g_strWatchDirectory);
-
- if( g_nDBBackType==0 )//月
- {
- if( st.wDay==g_nDBBackDate && st.wHour==g_nDBBackTime && !g_bDBBack )
- {
- g_bDBBack = true;
- CreateBat( str );
- ShellExecute(NULL,"open",strFile,"","", SW_SHOW);
- LOG4C_FUN( ( strFile ));
- }
- else if( st.wDay!=g_nDBBackDate || st.wHour!=g_nDBBackTime )
- {
- g_bDBBack = false;
- }
- }
- else//周
- {
- if( st.wDayOfWeek==g_nDBBackDate && st.wHour==g_nDBBackTime && !g_bDBBack )
- {
- g_bDBBack = true;
- CreateBat( str );
- ShellExecute(NULL,"open",strFile,"","", SW_HIDE);
- LOG4C_FUN( ( strFile ));
- }
- else if( st.wDay!=g_nDBBackDate || st.wHour!=g_nDBBackTime )
- {
- g_bDBBack = false;
- }
- }
- Sleep( 1000*60*1 );
- }while( WaitForSingleObject( g_hRunObject, 1250L ) == WAIT_TIMEOUT );
- return 0;
- }
|