YAServer.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. // YAServer.cpp : 定义应用程序的类行为。
  2. //
  3. #include "stdafx.h"
  4. #include "YAServer.h"
  5. #include "YAServerDlg.h"
  6. #include "def.h"
  7. #include "INIFILE.h"
  8. #include "Functions/Functions.h"
  9. #include "minidupm.h"
  10. #include "tlhelp32.h"
  11. #include "ProcessRemodule.h"
  12. #include "log_process_module.h"
  13. #include "./system_basic_info/SystemAnalysis.h"
  14. #include "./debug_server/debug_server_socket.h"
  15. #pragma warning(disable: 4005)
  16. extern int debug_server_init(void);
  17. #ifdef _DEBUG
  18. #define new DEBUG_NEW
  19. #endif
  20. // CYAServerApp
  21. BEGIN_MESSAGE_MAP(CYAServerApp, CWinApp)
  22. ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
  23. END_MESSAGE_MAP()
  24. // CYAServerApp 构造
  25. CYAServerApp::CYAServerApp()
  26. {
  27. // 支持重新启动管理器
  28. m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
  29. // TODO: 在此处添加构造代码,
  30. // 将所有重要的初始化放置在 InitInstance 中
  31. }
  32. // 唯一的一个 CYAServerApp 对象
  33. CYAServerApp theApp;
  34. // CYAServerApp 初始化
  35. BOOL CYAServerApp::InitInstance()
  36. {
  37. // 如果一个运行在 Windows XP 上的应用程序清单指定要
  38. // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
  39. //则需要 InitCommonControlsEx()。否则,将无法创建窗口。
  40. //避免启动两个采集程序
  41. //CreateMutex(NULL, FALSE, _T("MyMux"));
  42. //if(GetLastError() == ERROR_ALREADY_EXISTS){
  43. // HWND hWnd = ::FindWindow(NULL, _T("永安信通数据采集系统"));
  44. // ::PostMessage(hWnd, WM_QUIT, 0, 0);
  45. // //caption改为你窗口的具体caption
  46. // //::ShowWindow(hWnd,SW_SHOW);
  47. // //::SetForegroundWindow(hWnd); // 激活
  48. // //return FALSE;
  49. //}
  50. INITCOMMONCONTROLSEX InitCtrls;
  51. InitCtrls.dwSize = sizeof(InitCtrls);
  52. // 将它设置为包括所有要在应用程序中使用的
  53. // 公共控件类。
  54. InitCtrls.dwICC = ICC_WIN95_CLASSES;
  55. InitCommonControlsEx(&InitCtrls);
  56. SetUnhandledExceptionFilter(ExceptionFilter);
  57. CWinApp::InitInstance();
  58. AfxEnableControlContainer();
  59. // 创建 shell 管理器,以防对话框包含
  60. // 任何 shell 树视图控件或 shell 列表视图控件。
  61. CShellManager *pShellManager = new CShellManager;
  62. // 标准初始化
  63. // 如果未使用这些功能并希望减小
  64. // 最终可执行文件的大小,则应移除下列
  65. // 不需要的特定初始化例程
  66. // 更改用于存储设置的注册表项
  67. // TODO: 应适当修改该字符串,
  68. // 例如修改为公司或组织名
  69. SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
  70. init_param();
  71. load_conf();
  72. service_task_init();
  73. debug_server_init();
  74. debug_print_syslog(0, "Service thread, SQL thread, log thread Started.");
  75. //debug_server_process_thread_init();
  76. CYAServerDlg dlg;
  77. m_pMainWnd = &dlg;
  78. INT_PTR nResponse = dlg.DoModal();
  79. if (nResponse == IDOK)
  80. {
  81. // TODO: 在此放置处理何时用
  82. // “确定”来关闭对话框的代码
  83. }
  84. else if (nResponse == IDCANCEL)
  85. {
  86. // TODO: 在此放置处理何时用
  87. // “取消”来关闭对话框的代码
  88. }
  89. // 删除上面创建的 shell 管理器。
  90. if (pShellManager != NULL)
  91. {
  92. delete pShellManager;
  93. }
  94. // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
  95. // 而不是启动应用程序的消息泵。
  96. return FALSE;
  97. }
  98. /*
  99. * 写入配置文件
  100. *
  101. * param
  102. * section ------ 字段名
  103. * key ------ 键值
  104. * value ------ 值
  105. *
  106. * 例子:
  107. * [DB]
  108. * user=root
  109. * DB为字段名, user为键值,root为键值
  110. *
  111. *
  112. * return
  113. * 无
  114. *
  115. */
  116. void CYAServerApp::writeini( string section, string key, string value )
  117. {
  118. WritePrivateProfileStringA(section.c_str(), key.c_str(), value.c_str(), FILEPATH_SERVER_CONFIG);
  119. }
  120. /*
  121. * 载入主数据库配置和备用数据库配置
  122. *
  123. * param
  124. * 无
  125. *
  126. * return
  127. * 无
  128. *
  129. */
  130. void CYAServerApp::load_db_conf()
  131. {
  132. IniFile ini;
  133. if(ini.open(FILEPATH_SERVER_CONFIG)){
  134. //主数据库ip
  135. dbhost = ini.read(CONF_SECT_DB, CONF_DB_KEY_HOST);
  136. //主数据库用户名
  137. dbuser = ini.read(CONF_SECT_DB, CONF_DB_KEY_USER);
  138. //主数据库密码
  139. dbpwd = ini.read(CONF_SECT_DB, CONF_DB_KEY_PWD);
  140. //主数据库数据库名
  141. dbname = ini.read(CONF_SECT_DB, CONF_DB_KEY_DBNAME);
  142. //是否使用备份数据库
  143. dbbackup = ini.read(CONF_SECT_DB, CONF_DB_KEY_DB_BACKUP);
  144. //主数据库服务器的端口
  145. dbport = atoi(ini.read(CONF_SECT_DB, CONF_DB_KEY_PORT).c_str());
  146. //主数据库的编码
  147. dbencoding = ini.read(CONF_SECT_DB, CONF_DB_KEY_ENCODING);
  148. //备用数据库ip
  149. dbhost_bk = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_HOST);
  150. //备用数据库用户名
  151. dbuser_bk = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_USER);
  152. //备用数据库密码
  153. dbpwd_bk = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_PWD);
  154. //备用数据库数据库名称
  155. dbname_bk = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_DBNAME);
  156. //备用数据库端口
  157. dbport_bk = atoi(ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_PORT).c_str());
  158. //备用数据库编码
  159. dbencoding_bk = ini.read(CONF_SECT_DB_BK, CONF_DB_KEY_ENCODING);
  160. }
  161. }
  162. /*
  163. * 保存主数据库配置和备用数据库配置到配置文件
  164. *
  165. * param
  166. * 无
  167. *
  168. * return
  169. * 无
  170. *
  171. */
  172. void CYAServerApp::save_db_conf()
  173. {
  174. char t[20];
  175. string s;
  176. sprintf_s(t, "%d", dbport);
  177. s = t;
  178. writeini(CONF_SECT_DB, CONF_DB_KEY_HOST, dbhost);
  179. writeini(CONF_SECT_DB, CONF_DB_KEY_USER, dbuser);
  180. writeini(CONF_SECT_DB, CONF_DB_KEY_PWD, dbpwd);
  181. writeini(CONF_SECT_DB, CONF_DB_KEY_DBNAME, dbname);
  182. writeini(CONF_SECT_DB, CONF_DB_KEY_DB_BACKUP, dbbackup);
  183. writeini(CONF_SECT_DB, CONF_DB_KEY_ENCODING, dbencoding);
  184. writeini(CONF_SECT_DB, CONF_DB_KEY_PORT, s);
  185. sprintf_s(t, "%d", dbport_bk);
  186. s = t;
  187. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_HOST, dbhost_bk);
  188. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_USER, dbuser_bk);
  189. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_PWD, dbpwd_bk);
  190. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_DBNAME, dbname_bk);
  191. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_ENCODING, dbencoding_bk);
  192. writeini(CONF_SECT_DB_BK, CONF_DB_KEY_PORT, s);
  193. }
  194. /*
  195. * 从配置文件载入系统配置
  196. *
  197. * param
  198. * 无
  199. *
  200. * return
  201. * 无
  202. *
  203. */
  204. void CYAServerApp::load_sys_conf()
  205. {
  206. locate_type = 0;
  207. IniFile ini;
  208. send_json_postion = 1000;
  209. send_json_counting = 5000;
  210. send_json_alarm = 5000;
  211. warning_point_alarm = 10000;
  212. send_json_device = 10000;
  213. ws_connect_interval = 2000;
  214. time_send_call = 5000;
  215. time_send_help = 5000;
  216. send_json_drivingface = 30000;
  217. send_json_leader = 1800000; //30 * 60 * 1000;
  218. load_leader = 14400000; // 4 * 60 * 60 * 1000
  219. tcp_port = PORT_SERVER_MASTER;
  220. if(ini.open(FILEPATH_SERVER_CONFIG)){
  221. ws_url = ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_WS_URL);
  222. ws_url_bk = ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_WS_URL_BK);
  223. tcp_host = ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_TCP_HOST);
  224. tcp_port = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_TCP_PORT).c_str());
  225. use_filter = (atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_USE_FILTER).c_str()) == 0 ? FALSE : TRUE);
  226. use_filter_odd = (atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_USE_FILTER_ODD).c_str()) == 0 ? FALSE : TRUE);
  227. recon_server = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_RECON_SERVER).c_str());
  228. recon_db = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_RECON_DB).c_str());
  229. reader_lost = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_READER_LOST).c_str());
  230. card_lost = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_CARD_LOST).c_str());
  231. timing_interval = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_TIMING_INTERVAL).c_str());
  232. sampling_interval = atof(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_SAMPLING_INTERVAL).c_str());
  233. coor_error = atof(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_COORDINATE_ERROR).c_str());
  234. ranging_error = atof(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_RANGING_ERROR).c_str());
  235. move_error = atof(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_MOVING_ERROR).c_str());
  236. z_offset = atof(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_Z_OFFSET).c_str());
  237. locate_type = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_LOCATE_TYPE).c_str());
  238. heart_interval = atoi(ini.read(CONF_SECT_SERVER_SETTING,CONF_SERVER_HEART_INTERVAL).c_str());
  239. send_json_postion = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_POSION).c_str());
  240. send_json_counting = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_COUNTING).c_str());
  241. send_json_alarm = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_ALARM).c_str());
  242. warning_point_alarm = atoi(ini.read(CONF_SECT_SERVER_SETTING,CONF_WARNING_POINT_ALARM).c_str());
  243. send_json_device = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_DEVICE).c_str());
  244. send_json_drivingface = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_DRIVINGFACE).c_str());
  245. send_json_leader = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_LEADER).c_str());
  246. load_leader = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_LOAD_LEADER).c_str());
  247. ws_connect_interval = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_WS_CONNECT_INTERVAL).c_str());
  248. time_send_call = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_CALLINFO_INTERVAL).c_str());
  249. time_send_help = atoi(ini.read(CONF_SECT_SERVER_SETTING, CONF_SEND_HELPINFO_INTERVAL).c_str());
  250. }
  251. }
  252. /*
  253. * 保存系统设置到配置文件
  254. *
  255. * param
  256. * 无
  257. *
  258. * return
  259. * 无
  260. *
  261. */
  262. void CYAServerApp::save_sys_conf()
  263. {
  264. char t[20];
  265. string s;
  266. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_WS_URL, ws_url);
  267. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_WS_URL_BK, ws_url_bk);
  268. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_USE_FILTER, use_filter ? "1" : "0");
  269. sprintf_s(t, "%d", recon_server);
  270. s = t;
  271. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_RECON_SERVER, s);
  272. sprintf_s(t, "%d", recon_db);
  273. s = t;
  274. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_RECON_DB, s);
  275. sprintf_s(t, "%d", reader_lost);
  276. s = t;
  277. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_READER_LOST, s);
  278. sprintf_s(t, "%d", card_lost);
  279. s = t;
  280. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_CARD_LOST, s);
  281. sprintf_s(t, "%d", timing_interval);
  282. s = t;
  283. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_TIMING_INTERVAL, s);
  284. sprintf_s(t, "%f", sampling_interval);
  285. s = t;
  286. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_SAMPLING_INTERVAL, s);
  287. sprintf_s(t, "%f", z_offset);
  288. s = t;
  289. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_Z_OFFSET, s);
  290. sprintf_s(t, "%f", coor_error);
  291. s = t;
  292. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_COORDINATE_ERROR, s);
  293. sprintf_s(t, "%f", ranging_error);
  294. s = t;
  295. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_RANGING_ERROR, s);
  296. sprintf_s(t, "%f", move_error);
  297. s = t;
  298. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_MOVING_ERROR, s);
  299. sprintf_s(t, "%d", tcp_port);
  300. s = t;
  301. writeini(CONF_SECT_SERVER_SETTING, CONF_SERVER_TCP_PORT, s);
  302. }
  303. /*
  304. * 从配置文件载入日志配置
  305. *
  306. * param
  307. * 无
  308. *
  309. * return
  310. * 无
  311. *
  312. */
  313. void CYAServerApp::load_log_conf()
  314. {
  315. IniFile ini;
  316. if(ini.open(FILEPATH_SERVER_CONFIG)){
  317. //系统状态
  318. log_sys_status = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_SYS_STATUS).c_str()) == 0 ? FALSE : TRUE);
  319. //原始数据,底层数据
  320. log_raw_data = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_RAW_DATA).c_str()) == 0 ? FALSE : TRUE);
  321. //格式化数据
  322. log_parse_data = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_PARSE_DATA).c_str()) == 0 ? FALSE : TRUE);
  323. //发送数据包
  324. log_send_package = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_SEND_EVENT).c_str()) == 0 ? FALSE : TRUE);
  325. //接收数据包
  326. log_recv_package = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_REV_EVENT).c_str()) == 0 ? FALSE : TRUE);
  327. //定位数据
  328. log_locate_data = (atoi(ini.read(CONF_SECT_SERVER_LOG, CONF_LOG_LOCATE_DATA).c_str()) == 0 ? FALSE : TRUE);
  329. }
  330. }
  331. /*
  332. * 保存日志设置
  333. *
  334. * param
  335. * 无
  336. *
  337. * return
  338. * 无
  339. *
  340. */
  341. void CYAServerApp::save_log_conf()
  342. {
  343. writeini(CONF_SECT_SERVER_LOG, CONF_LOG_SYS_STATUS, log_sys_status ? "1" : "0");
  344. writeini(CONF_SECT_SERVER_LOG, CONF_LOG_RAW_DATA, log_raw_data ? "1" : "0");
  345. writeini(CONF_SECT_SERVER_LOG, CONF_LOG_PARSE_DATA, log_parse_data ? "1" : "0");
  346. writeini(CONF_SECT_SERVER_LOG, CONF_LOG_SEND_EVENT, log_send_package ? "1" : "0");
  347. writeini(CONF_SECT_SERVER_LOG, CONF_LOG_REV_EVENT, log_recv_package ? "1" : "0");
  348. writeini(CONF_SECT_SERVER_LOG,CONF_LOG_LOCATE_DATA,log_locate_data ? "1" : "0");
  349. }
  350. /*
  351. * 设置监控服务器句柄以及路径
  352. *
  353. * param
  354. * hwd ------ 主对话框窗口句柄
  355. *
  356. * return
  357. * 无
  358. *
  359. */
  360. void CYAServerApp::set_server_handle(HWND hwd)
  361. {
  362. char t[20];
  363. char szAppdir[MAX_PATH+1] = {0};
  364. GetModuleFileNameA(NULL, szAppdir , MAX_PATH);
  365. sprintf_s(t, "%d", DWORD(hwd));
  366. writeini(CONF_SECT_MONITOR, CONF_MONITOR_SERVER_HANDLE, t);
  367. writeini(CONF_SECT_MONITOR, CONF_MONITOR_SERVER_PATH, szAppdir);
  368. }
  369. /*
  370. * 从配置文件载入监控配置
  371. *
  372. * param
  373. * 无
  374. *
  375. * return
  376. * 无
  377. *
  378. */
  379. void CYAServerApp::load_monitor_conf()
  380. {
  381. IniFile ini;
  382. if(ini.open(FILEPATH_SERVER_CONFIG)){
  383. m_hwnd_monitor = HWND(atoi(ini.read(CONF_SECT_MONITOR, CONF_MONITOR_MONITOR_HANDLE).c_str()));
  384. string path = ini.read(CONF_SECT_MONITOR, CONF_MONITOR_MONITOR_PATH);
  385. sprintf_s(m_path_monitor.get(), MAX_PATH, "%s", path.c_str());
  386. //sprintf( m_path_monitor, "%s", path.c_str());
  387. }
  388. }
  389. /*
  390. * 初始化监视软件路径
  391. *
  392. * param
  393. * 无
  394. *
  395. * return
  396. * 无
  397. *
  398. */
  399. void CYAServerApp::init_param()
  400. {
  401. m_path_monitor = nullptr;
  402. std::unique_ptr<char> tmp(new char[MAX_PATH]);
  403. m_path_monitor = std::move(tmp);
  404. memset(m_path_monitor.get(),0,MAX_PATH*sizeof(char));
  405. }
  406. /*
  407. * 保存间隔配置到配置文件
  408. *
  409. * param
  410. * 无
  411. *
  412. * return
  413. * 无
  414. *
  415. */
  416. void CYAServerApp::save_interval_conf()
  417. {
  418. char t[20];
  419. string s;
  420. sprintf_s(t, "%d", send_json_postion);
  421. s = t;
  422. writeini(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_POSION, s);
  423. sprintf_s(t, "%d", send_json_counting);
  424. s = t;
  425. writeini(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_COUNTING, s);
  426. sprintf_s(t, "%d", send_json_alarm);
  427. s = t;
  428. writeini(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_ALARM, s);
  429. sprintf_s(t, "%d", send_json_device);
  430. s = t;
  431. writeini(CONF_SECT_SERVER_SETTING, CONF_SEND_JSON_DEVICE, s);
  432. }
  433. void CYAServerApp::load_reader_conf()
  434. {
  435. IniFile ini;
  436. if(ini.open(FILEPATH_SERVER_CONFIG)){
  437. //分站发送时间消息
  438. reader_interval_time = atoi(ini.read(CONF_SECT_READER, CONF_READER_INTERVAL_TIME).c_str());
  439. }
  440. }
  441. void CYAServerApp::save_reader_conf()
  442. {
  443. char t[20] = {0};
  444. string s;
  445. sprintf_s(t, "%d", reader_interval_time);
  446. s = t;
  447. writeini(CONF_SECT_READER, CONF_READER_INTERVAL_TIME, s);
  448. }
  449. BOOL CYAServerApp::KillProcessFromName(CString strProcessName)
  450. {
  451. //创建进程快照(TH32CS_SNAPPROCESS表示创建所有进程的快照)
  452. HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  453. //PROCESSENTRY32进程快照的结构体
  454. PROCESSENTRY32 pe;
  455. //实例化后使用Process32First获取第一个快照的进程前必做的初始化操作
  456. pe.dwSize = sizeof(PROCESSENTRY32);
  457. //下面的IF效果同:
  458. //if(hProcessSnap == INVALID_HANDLE_VALUE) 无效的句柄
  459. if(!Process32First(hSnapShot,&pe))
  460. {
  461. return FALSE;
  462. }
  463. //将字符串转换为小写
  464. strProcessName.MakeLower();
  465. //如果句柄有效 则一直获取下一个句柄循环下去
  466. while (Process32Next(hSnapShot,&pe))
  467. {
  468. //pe.szExeFile获取当前进程的可执行文件名称
  469. CString scTmp = pe.szExeFile;
  470. //将可执行文件名称所有英文字母修改为小写
  471. scTmp.MakeLower();
  472. //比较当前进程的可执行文件名称和传递进来的文件名称是否相同
  473. //相同的话Compare返回0
  474. if(!scTmp.Compare(strProcessName))
  475. {
  476. //从快照进程中获取该进程的PID(即任务管理器中的PID)
  477. DWORD dwProcessID = pe.th32ProcessID;
  478. HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessID);
  479. ::TerminateProcess(hProcess,0);
  480. CloseHandle(hProcess);
  481. return TRUE;
  482. }
  483. scTmp.ReleaseBuffer();
  484. }
  485. strProcessName.ReleaseBuffer();
  486. return FALSE;
  487. }
  488. void CYAServerApp::load_conf()
  489. {
  490. load_db_conf();
  491. load_sys_conf();
  492. load_log_conf();
  493. load_reader_conf();
  494. }