YAServer.cpp 14 KB

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