123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- // WxService.cpp : 定义控制台应用程序的入口点。
- //
- #include "stdafx.h"
- #include "WxService.h"
- #include "MainProcess.h"
- #define _CRTDBG_MAP_ALLOC
- #include<stdlib.h>
- #include<crtdbg.h>
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- // 唯一的应用程序对象
- CWinApp theApp;
- using namespace std;
- // 工作启动回调函数;
- void CALLBACK WorkStart()
- {
- if (CreatePoolInstance())
- {
- // 尝试10次启动;
- INT i = 10;
- while (0 == g_pAdoPool->InitializePool(Global::g_szDBType, Global::g_szDBSource, Global::g_dwDBServerPort, Global::g_szDBAccount, Global::g_szDBPassWord, Global::g_szDBName, Global::g_dwDBPoolDef, Global::g_dwDBPoolMaxCount))
- {
- Sleep(5000);
- if (i < 0)
- {
- break;
- }
- i--;
- }
- }
- #ifdef _DEBUG
- // 添加用户;
- tb_customer customer;
- customer.set_customer_phone(_T("15089231318"));
- customer.set_customer_password(_T("15089231318"));
- customer.set_customer_name(_T("jeff"));
- customer.set_customer_gender(true);
- customer.set_customer_gen_time(CWxAdoImpl::GetCurrentLocalTime().c_str());
- g_pAdoPool->AddCustomer((LPVOID)&customer);
- customer.Clear();
- g_pAdoPool->QueryUserDetail(_T("15089231318"), (LPVOID)&customer);
- // 添加回复类型;
- tb_type type;
- type.set_customer_id(customer.customer_id().c_str());
- type.set_type_name(_T("电脑类"));
- type.set_type_gen_time(CWxAdoImpl::GetCurrentLocalTime().c_str());
- g_pAdoPool->AddType((LPVOID)&type);
- // 添加回复详情;
- tb_reply reply;
- reply.set_customer_id(type.customer_id().c_str());
- reply.set_type_id(type.type_id().c_str());
- reply.set_reply_name(_T("电脑主板价格"));
- reply.set_reply_content(_T("当前价格100元人民币"));
- reply.set_reply_gen_time(CWxAdoImpl::GetCurrentLocalTime().c_str());
- g_pAdoPool->AddReply((LPVOID)&reply);
- #endif
- WinService::GetDebugPriv();
- CMainProcess::GetInstance()->StartWork();
- }
- // 工作结束回调函数;
- void CALLBACK WorkEndof()
- {
- FreelyfzodbcLibrary();
- CMainProcess *pObj = CMainProcess::GetInstance();
- if (pObj)
- {
- pObj->EndofWork();
- delete pObj;
- pObj = NULL;
- }
- }
- int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
- {
- int nRetCode = 0;
- _CrtSetBreakAlloc(165);
- // 直接获得前景窗口的句柄;
- HWND hwnd = GetForegroundWindow();
- SendMessage(hwnd , WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(NULL,MAKEINTRESOURCE(IDI_MICON)));
- HMODULE hModule = ::GetModuleHandle(NULL);
- // 初始化 MFC 并在失败时显示错误
- if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
- {
- // TODO: 更改错误代码以符合您的需要
- _tprintf(_T("错误: MFC 初始化失败\n"));
- nRetCode = 1;
- }
- else
- {
- Global::GetIniInfo();
- // 进程存在,直接退出;
- TCHAR szExeName[MAX_PATH] = {0};
- TCHAR szDrive[_MAX_DRIVE] = { 0 };
- TCHAR szDir[_MAX_DIR] = { 0 };
- TCHAR szFna[_MAX_DIR] = { 0 };
- TCHAR szExt[_MAX_DIR] = { 0 };
- _tsplitpath_s(Global::g_szModuleFileName, szDrive, szDir, szFna, szExt);
- _stprintf_s(szExeName, _T("%s%s"), szFna, szExt);
- if ( Global::FindProcessCount(szExeName) > 1)
- {// 进程计数大于1,退出;
- return 0;
- }
- #ifdef _DEBUG
- WorkStart();
- system("pause");
- WorkEndof();
- #else
- // 设置服务名和描述;
- _stprintf_s(WinService::g_scVariant.scName, _T("WxService"));
- _stprintf_s(WinService::g_scVariant.scDisplayName, _T("WxService"));
- _stprintf_s(WinService::g_scVariant.scDescription, _T("微信服务"));
- // 1.先判断服务是否存在;
- if ( WinService::IsInstalled())
- {
- // 卸载服务;
- if ( argc > 1)
- {
- if (_tcscmp((TCHAR *)argv[1], _T("/uninstall")) == 0)
- WinService::DoDeleteSvc(WinService::g_scVariant.scName);
- else
- printf(_T("未有卸载服务参数行\n"));
- system("pause");
- return 0;
- }
- else
- {
- WinService::SetCallBack(WorkStart, WorkEndof);
- SERVICE_TABLE_ENTRY st[] =
- {
- { WinService::g_scVariant.scName, (LPSERVICE_MAIN_FUNCTION)WinService::ServiceMain },
- { NULL, NULL }
- };
- if (!::StartServiceCtrlDispatcher(st)) // 在直接双击.exe时,这步会运行失败;
- {
- WinService::SvcReportEvent(_T("Register Service Main Function Error!"));
- printf(_T("双击无法安装\n"));
- system("pause");
- return 0;
- }
- }
- }
- // 2.不存在,安装服务;
- WinService::SetCallBack(WorkStart, WorkEndof);
- SERVICE_TABLE_ENTRY st[] =
- {
- { WinService::g_scVariant.scName, (LPSERVICE_MAIN_FUNCTION)WinService::ServiceMain },
- { NULL, NULL }
- };
- WinService::Install();
- #endif
- }
- return nRetCode;
- }
|