YAServer.cpp 14 KB

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