您的位置:首页 > 其它

MFC应用程序 变身成 windows服务程序

2016-11-09 11:20 204 查看
最近开发一个运行在winserver2008的服务程序,有简单配置界面,有socket服务端代码,有一些windows消息处理(比如WM_WTSSESSION_CHANGE 、WM_TIMER);

很简单的一个程序,也不需要什么特别的要求(跨平台什么的),所以直接用MFC写了,结果一用出问题了:

该2008服务器经常用来做RDP-remoteapp模式的服务器来用(比如IE,原因是因为网络限制,只有服务器能访问特定的IP,比如https://192.168.1.123),

在RDP-RemoteApp(IE)模式下,用administratro帐号登录,结束时会导致帐号注销,一注销,我的托盘程序就被杀死了。。。

就想如何不让它被杀死, 就想改成服务吧,一般的服务写过,主要是socket服务程序,而我这个程序已经写完了,代码不算少,全部重写为服务程序,效率太低了;

而且还必须要处理好几个windows消息, 倒腾了近1天,终于实现了,很简单从MFC 应用程序改成windows服务,特此记录一下!

windows服务相关的代码就不写了,网上一搜就很多,也很好,主要说MFC应用程序的改动.

在InitInstance函数中,把创建Dlg的代码都注释掉(暂时),换成服务开始函数(主要包括SERVICE_TABLE_ENTRY和StartServiceCtrlDispatcher),

在entrytable[0].lpServiceProc所指向的服务主函数中,最后结束的位置协商创建Dlg的代码(改成非模态,然后加上消息循环),如下:

CMyDlg dlg;
dlg.Create(IDD_MYDIALOG_DIALOG,NULL);
dlg.ShowWindow(SW_SHOW);

MSG msg;
whie(GetMessage(&msg, dlg.GetSafeHwnd(), 0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

对,重点就上边这几句话,就完成了(必须非模态,必须有消息循环)
希望对大家有帮助!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windows mfc 服务程序