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

最近开发一个运行在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);
}

对,重点就上边这几句话,就完成了(必须非模态,必须有消息循环)

希望对大家有帮助!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值