SATService.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. // SATService.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include "SATService.h"
  5. #include "MainProcess.h"
  6. #include "SATExecutor.h"
  7. #include "SATDevices.h"
  8. #include "SATTCPServer.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #endif
  12. // 唯一的应用程序对象
  13. CWinApp theApp;
  14. using namespace std;
  15. extern int test();
  16. // 工作启动回调函数;
  17. void CALLBACK WorkStart()
  18. {
  19. WindowsService::GetDebugPriv();
  20. #ifdef _DEBUG
  21. CSATExecutor::GetInstance()->Login("superAdmin", "123456", "SAT-Admin");
  22. CSATExecutor::GetInstance()->UpdateDevice();
  23. #endif
  24. // 启用SAT执行器;
  25. CSATExecutor::GetInstance()->StartWork();
  26. // 启动SAT TCP服务端;
  27. CSATTCPServer::GetInstance()->LoadSocketLib();
  28. CSATTCPServer::GetInstance()->Start(5588);
  29. // 启动设备扫描器;
  30. CSATDevices::GetInstance()->StartWork();
  31. }
  32. // 工作结束回调函数;
  33. void CALLBACK WorkEndof()
  34. {
  35. Global::WriteTextLog("SATService goto end");
  36. CSATTCPServer::GetInstance()->Stop();
  37. CSATTCPServer::GetInstance()->UnloadSocketLib();
  38. CMainProcess::GetInstance()->EndofWork();
  39. Global::WriteTextLog("SATService work end!");
  40. }
  41. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
  42. {
  43. int nRetCode = 0;
  44. // 直接获得前景窗口的句柄;
  45. HWND hwnd = GetForegroundWindow();
  46. SendMessage(hwnd , WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(NULL,MAKEINTRESOURCE(IDI_MICON)));
  47. HMODULE hModule = ::GetModuleHandle(NULL);
  48. // 初始化 MFC 并在失败时显示错误
  49. if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
  50. {
  51. // TODO: 更改错误代码以符合您的需要
  52. _tprintf(_T("错误: MFC 初始化失败\n"));
  53. nRetCode = 1;
  54. }
  55. else
  56. {
  57. // TODO: 在此处为应用程序的行为编写代码。
  58. Global::GetIniInfo();
  59. Global::GetMacAddress();
  60. Global::WriteTextLog("SATService goto start");
  61. #ifdef _DEBUG
  62. #if 0
  63. // 启用SAT执行器;
  64. CSATExecutor::GetInstance()->Login("superAdmin", "123456");
  65. CSATExecutor::GetInstance()->UpdateDevice();
  66. CSATExecutor::GetInstance()->StartWork();
  67. #endif
  68. #if 1
  69. // 启动SAT TCP服务端;
  70. CSATTCPServer::GetInstance()->LoadSocketLib();
  71. CSATTCPServer::GetInstance()->Start(5588);
  72. #endif
  73. #if 1
  74. CSATDevices::GetInstance()->StartWork();
  75. #endif
  76. // 指定时间停止;
  77. ULONGLONG ulTickCount = GetTickCount64();
  78. //while (GetTickCount64() - ulTickCount < 1800000 )
  79. while(1)
  80. {
  81. //CSATExecutor::GetInstance()->Login("superAdmin", "123456");
  82. //printf("倒计时:%ld\n",GetTickCount64() - ulTickCount);
  83. Sleep(1000);
  84. }
  85. CSATTCPServer::GetInstance()->Stop();
  86. return 0;
  87. #endif
  88. // 进程存在,直接退出;
  89. TCHAR szExeName[MAX_PATH] = {0};
  90. TCHAR szDrive[_MAX_DRIVE] = { 0 };
  91. TCHAR szDir[_MAX_DIR] = { 0 };
  92. TCHAR szFna[_MAX_FNAME] = { 0 };
  93. TCHAR szExt[_MAX_EXT] = { 0 };
  94. _tsplitpath_s(Global::g_szCurModuleFileName, szDrive, szDir, szFna, szExt);
  95. _stprintf_s(szExeName, _T("%s%s"), szFna, szExt);
  96. if ( Global::FindProcessCount(szExeName) > 1)
  97. {// 进程计数大于1,退出;
  98. return 0;
  99. }
  100. // 设置服务名和描述;
  101. _stprintf_s(WindowsService::g_szSvcName, _T("SAT Service"));
  102. _stprintf_s(WindowsService::g_szlpSvrDescription, _T("SAT自动化服务"));
  103. // 1.先判断服务是否存在;
  104. if ( WindowsService::IsSvcInstalled())
  105. {
  106. // 卸载服务;
  107. if ( argc > 1)
  108. {
  109. if (_tcscmp((TCHAR *)argv[1], _T("/uninstall")) == 0)
  110. WindowsService::DoDeleteSvc(WindowsService::g_szSvcName);
  111. else
  112. _tprintf_s(_T("未有卸载服务参数行\n"));
  113. return 0;
  114. }
  115. else
  116. {
  117. WindowsService::InitSvcVar();
  118. WindowsService::SetCallBack(WorkStart, WorkEndof);
  119. SERVICE_TABLE_ENTRY st[] =
  120. {
  121. { WindowsService::g_szSvcName, (LPSERVICE_MAIN_FUNCTION)WindowsService::ServiceMain },
  122. { NULL, NULL }
  123. };
  124. if (!::StartServiceCtrlDispatcher(st)) // 在直接双击.exe时,这步会运行失败;
  125. {
  126. //LOG4C((LOG_NOTICE,"服务已安装,须系统运行控制"));
  127. WindowsService::SvcReportEvent(_T("Register Service Main Function Error!"));
  128. return 0;
  129. }
  130. }
  131. }
  132. // 2.不存在,安装服务;
  133. WindowsService::InitSvcVar();
  134. WindowsService::SetCallBack(WorkStart, WorkEndof);
  135. SERVICE_TABLE_ENTRY st[] =
  136. {
  137. { WindowsService::g_szSvcName, (LPSERVICE_MAIN_FUNCTION)WindowsService::ServiceMain },
  138. { NULL, NULL }
  139. };
  140. WindowsService::SvcInstall();
  141. }
  142. return nRetCode;
  143. }