Browse Source

fixed bug

lihz 8 years ago
parent
commit
51e8a36b41
5 changed files with 70 additions and 3 deletions
  1. 59 0
      YAServer.cpp
  2. 2 0
      YAServer.h
  3. 7 3
      YAServerDlg.cpp
  4. 1 0
      YAServerDlg.h
  5. 1 0
      def.h

+ 59 - 0
YAServer.cpp

@@ -9,6 +9,7 @@
 #include "INIFILE.h"
 #include "Functions/Functions.h"
 #include "minidupm.h"
+#include "tlhelp32.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -55,6 +56,13 @@ BOOL CYAServerApp::InitInstance()
 		//return FALSE;
 	}
 
+	//CString	g_AppPath;
+	//char cIniFileName[MAX_PATH];
+	//GetModuleFileNameA(NULL,cIniFileName,sizeof(cIniFileName)) ;
+	//char * p = strrchr(cIniFileName, '\\') ;
+	//g_AppPath.Format(_T("%s"),CFunctions::c2wc(p));
+
+
 	INITCOMMONCONTROLSEX InitCtrls;
 	InitCtrls.dwSize = sizeof(InitCtrls);
 	// 将它设置为包括所有要在应用程序中使用的
@@ -462,3 +470,54 @@ void CYAServerApp::save_reader_conf()
 	s = t;
 	writeini(CONF_SECT_READER, CONF_READER_INTERVAL_TIME, s);
 }
+
+BOOL CYAServerApp::KillProcessFromName(CString strProcessName)
+{
+	//创建进程快照(TH32CS_SNAPPROCESS表示创建所有进程的快照)  
+	HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);  
+
+	//PROCESSENTRY32进程快照的结构体  
+	PROCESSENTRY32 pe;  
+
+	//实例化后使用Process32First获取第一个快照的进程前必做的初始化操作  
+	pe.dwSize = sizeof(PROCESSENTRY32);  
+
+
+	//下面的IF效果同:  
+	//if(hProcessSnap == INVALID_HANDLE_VALUE)   无效的句柄  
+	if(!Process32First(hSnapShot,&pe))  
+	{  
+		return FALSE;  
+	}  
+
+	//将字符串转换为小写  
+	strProcessName.MakeLower();  
+
+	//如果句柄有效  则一直获取下一个句柄循环下去  
+	while (Process32Next(hSnapShot,&pe))  
+	{  
+
+		//pe.szExeFile获取当前进程的可执行文件名称  
+		CString scTmp = pe.szExeFile;  
+
+
+		//将可执行文件名称所有英文字母修改为小写  
+		scTmp.MakeLower();  
+
+		//比较当前进程的可执行文件名称和传递进来的文件名称是否相同  
+		//相同的话Compare返回0  
+		if(!scTmp.Compare(strProcessName))  
+		{  
+
+			//从快照进程中获取该进程的PID(即任务管理器中的PID)  
+			DWORD dwProcessID = pe.th32ProcessID;  
+			HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE,FALSE,dwProcessID);  
+			::TerminateProcess(hProcess,0);  
+			CloseHandle(hProcess);  
+			return TRUE;  
+		}  
+		scTmp.ReleaseBuffer();  
+	}  
+	strProcessName.ReleaseBuffer();  
+	return FALSE;  
+}

+ 2 - 0
YAServer.h

@@ -97,6 +97,8 @@ public:
 	void load_reader_conf();
 	void save_reader_conf();
 
+	BOOL KillProcessFromName(CString strProcessName);
+
 	DECLARE_MESSAGE_MAP()
 };
 

+ 7 - 3
YAServerDlg.cpp

@@ -613,6 +613,7 @@ void CYAServerDlg::init_param()
 	m_nPort = PORT_SERVER_MASTER;
 	m_nCountClick = 0;
 	m_ws_url = TEST_WS_URL;
+	m_tcp_host = LOCAL_ADDRESS;
 
 	time_over_count_person = time_over_count_vehicle = 0;
 	is_server_ok = true;
@@ -659,7 +660,6 @@ void CYAServerDlg::stop_and_exit()
 
 	clear_all_list();
 	GetConnPool().CloseAllConn();
-	CDialogEx::OnCancel();
 
 	DeleteCriticalSection(&m_csWriteLog);
 	DeleteCriticalSection(&m_csParseDataServer);
@@ -668,6 +668,8 @@ void CYAServerDlg::stop_and_exit()
 	DeleteCriticalSection(&m_csAddDist);
 	DeleteCriticalSection(&m_csSyncTime);
 	DeleteCriticalSection(&m_csCallInfo);
+
+	CDialogEx::OnCancel();
 }
 
 void CYAServerDlg::set_run_state()
@@ -1765,9 +1767,9 @@ void CYAServerDlg::start_tcp_server()
 
 	set_app_state(ST_STARTING);
 
-	if(_server.Start(LOCAL_ADDRESS, PORT_SERVER_MASTER))
+	if(_server.Start(m_tcp_host, PORT_SERVER_MASTER))
 	{
-		::LogServerStart(LOCAL_ADDRESS, PORT_SERVER_MASTER);
+		::LogServerStart(m_tcp_host, PORT_SERVER_MASTER);
 		set_app_state(ST_STARTED);
 		is_start_tcp = true;
 	}
@@ -4209,6 +4211,8 @@ void CYAServerDlg::load_param_from_ini()
 	if(ini.open(FILEPATH_SERVER_CONFIG)){
 		strvalue = ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_WS_URL);
 		m_ws_url = strvalue;
+		strvalue = ini.read(CONF_SECT_SERVER_SETTING, CONF_SERVER_TCP_HOST);
+		m_tcp_host = CFunctions::c2wc(strvalue.c_str());
 
 		int nBackup = atoi(theApp.dbbackup.c_str());
 		switch(nBackup){

+ 1 - 0
YAServerDlg.h

@@ -208,6 +208,7 @@ public:
 	_SLS sls_setting;
 	_DBS m_db_setting;
 	string m_ws_url;
+	CString m_tcp_host;
 
 	double m_reader_interval_time;
 

+ 1 - 0
def.h

@@ -24,6 +24,7 @@
 
 #define CONF_SECT_SERVER_SETTING "SERVER_SETTING"
 #define CONF_SERVER_WS_URL "websocket_url"
+#define CONF_SERVER_TCP_HOST "tcp_host"
 #define CONF_SERVER_WS_URL_BK "websocket_url_bk"
 #define CONF_SERVER_USE_FILTER "use_filter"
 #define CONF_SERVER_USE_FILTER_ODD "use_filter_odd"