WEB开发网
开发学院软件开发VC 编写有图形界面的 Windows 服务程序 阅读

编写有图形界面的 Windows 服务程序

 2007-03-17 22:00:17 来源:WEB开发网   
核心提示: 说到这里,就涉及到我们自己编写的代码了,编写有图形界面的 Windows 服务程序(4),比如现在我们已经建立了一个MFC的程序,想让它成为一个服务程序,这里我们删除RegisterServer,UnregisterServer两个函数,那要怎么做呢?我现在建立一个MFC EXE的项目mf

说到这里,就涉及到我们自己编写的代码了。

比如现在我们已经建立了一个MFC的程序,想让它成为一个服务程序,那要怎么做呢?

我现在建立一个MFC EXE的项目mfc1,基于对话框。那么把它变为一个服务程序的最简单的方法就是把CServiceModule给拿过来使用。因为我们已经看到CServiceModule类已经把安装服务,卸载服务,运行服务这些操作封装得很好。

打开test1的stdafx.h文件,复制CServiceModule的声明及相关头文件和变量到mfc1的stdafx.h中。

然后是把test1的test1.cpp中对CServiceModule类的实现,复制到mfc1中的mfc1.cpp中。

在stdafx.h中CServiceModule类声明前加上#include <winsvc.h>,它里面是对结构体SERVICE_STATUS_HANDLE的声明。

编译后出现以下类似错误:

D:vc6_testmfc1mfc1.cpp(52) : error C2065: ''IDR_Test1'' : undeclared identifier
D:vc6_testmfc1mfc1.cpp(336) : error C2065: ''CoInitializeSecurity'' : undeclared identifier
D:vc6_testmfc1mfc1.cpp(337) : error C2065: ''EOAC_NONE'' : undeclared identifier
D:vc6_testmfc1mfc1.cpp(362) : error C2065: ''IDS_SERVICENAME'' : undeclared identifier
D:vc6_testmfc1mfc1.cpp(362) : error C2065: ''LIBID_TEST1Lib'' : undeclared identifier

我们可以在test1中找到IDR_Test1的声明,放到mfc1中,解决第一条错误。但我们也可以去掉CServiceModule中与COM有关的一些代码。这里我们删除RegisterServer,UnregisterServer两个函数,并让Run函数成为

void CServiceModule::Run()
{
  _Module.dwThreadID = GetCurrentThreadId();
  LogEvent(_T("Service started"));
  if (m_bService)
    SetServiceStatus(SERVICE_RUNNING);
  MSG msg;
  while (GetMessage(&msg, 0, 0, 0))
    DispatchMessage(&msg);
}    
增加资源IDS_SERVICENAME为“mfc1”。

上一页  1 2 3 4 5  下一页

Tags:编写 图形 界面

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接