已经写好的一个带图形界面的mfc程序 想把它同时做成服务程序 怎么办?
需要添加什么代码 没思路 请教!

解决方案 »

  1.   

    简单点的方法
    1,另外用向导创建一个服务程序,编译通过。
    2,将你的xxxdlg.cpp, xxxdlg.h(如果是dlg)包括其它相关资源加入此工程。
    3, 在Run()中增加一个线程,用这个线程启动你的dlg,而不要用其它方式,否则Run如果超时的话服务马上就退出了,无法成功运行的。
    4,可选的:可在程序中增加下次自动启动服务或关闭服务的代码等附加功能。示例如下:
    void CKMServerModule::Run()
    {
        _AtlModule.dwThreadID = GetCurrentThreadId();
        LogEvent(_T("Service started"));
        if (m_bService)
            SetServiceStatus(SERVICE_RUNNING);

    pThread = AfxBeginThread(Trigger, NULL); //这个就是启动dlg线程了    MSG msg;
        while (GetMessage(&msg, 0, 0, 0))
            DispatchMessage(&msg);
    }UINT Trigger(LPVOID pParam)
    {
    CKMServerDlg dlg;  //声明dlg
    dlg.Create(IDD_KMSERVER_DIALOG);
    dlg.ShowWindow(nCmdShow);
    dlg.RunModalLoop();
    return 0;
    }
      

  2.   


    程序是已经写好的所以 不可以新建一个了
    用向导创建一个服务程序 这个还要clr支持吧?
      

  3.   

    你说的是atl向导建立的服务程序吧?
    那个CxxxModule的类可以单独提取出来给现成的mfc程序用吧?
      

  4.   

    win7下的服务即使带界面也无法和当前登录的桌面进行交互,服务和当前用户在不同的session下。
    服务一般是不提倡带界面的,我还从没看见过有服务带界面的。服务带界面本身也是一种错误的编程思想,服务从定义的角色来看,本身就不应该带界面,只是提供功能接口,不提供操作界面。正确的思想是后台服务+前台界面的模式。需要有一个不带界面的后台服务和一个用于访问服务的前端界面exe。现有的软件,包括系统自带的软件,杀毒软件也好,都是这个模式。比如windows的磁盘管理,你虽然在界面上操作,其实是前台的exe和后台虚拟磁盘服务进行通信的结果。杀毒软件也是,用前台的exe和后台服务进行通信,即使你关闭了前端的操作界面,后台服务仍在进行。和服务通信,采用命名管道的居多,也有一些采用socket通信的