VC2008实现Windows服务程序 vc 实现安装程序

下面就是用 Visual Studio 2008 中的 VC++2008 写系统服务的详细步骤

1. 新建项目。

1-1. 启动 Visual Studio 2008。选择 File -> New -> Project...。

1-2. 在 New Project 对话框中,选择 Visual C++ 中的 ATL Project模板,写入项目名称:TestWinService,点 OK。

1-3. 在打开的 ATL Project Wizard 中,点 ApplicationSettings,选择 Server type 为 Service(EXE),点 Finish。

2. 安装、卸载服务。

2-1. 编译项目。

2-2. 打开命令提示符,切换到编译后的目录,执行以下命令安装服务:
TestWinService.exe /Service

2-3. 打开服务管理,能找到一个名为TestWinService的服务,启动类型是Manual。可以启动服务、停止服务。

2-4. 停止服务,然后用以下命令卸载服务:
ShowjiSvc /UnRegServer

2-5 如果要删除服务使用命令:sc delete TestWinService

3. 修改服务的配置。

3-1. 修改服务名称:
在 Resource View 中打开 String Table,修改 IDS_SERVICENAME 的 Caption为服务的名称:***。

3-2. 修改服务的描述:
打开 TestWinService.cpp 文件,在 CTestWinServiceModule的声明中增加以下函数声明:

  HRESULT RegisterAppId(boolbService);

再增加此函数的定义:

HRESULT CTestWinServiceModule::RegisterAppId(boolbService = false) throw()

{

HRESULT hr = S_OK;

BOOL res =__super::RegisterAppId(bService);

if(bService)

{

if (IsInstalled())

{

SC_HANDLE hSCM = ::OpenSCManagerW(NULL, NULL,SERVICE_CHANGE_CONFIG);

SC_HANDLE hService = NULL;

if (hSCM == NULL)

hr = AtlHresultFromLastError();

else

{

hService = ::OpenService(hSCM, m_szServiceName,SERVICE_CHANGE_CONFIG);

if (hService != NULL)

{

::ChangeServiceConfig(hService, SERVICE_NO_CHANGE,SERVICE_AUTO_START,NULL, NULL, NULL, NULL, NULL, NULL,NULL,m_szServiceName); // 通过修改资源IDS_SERVICENAME修改服务的显示名字

SERVICE_DESCRIPTION Description;

TCHAR szDescription[1024];

ZeroMemory(szDescription, 1024);

ZeroMemory(&Description,sizeof(SERVICE_DESCRIPTION));

lstrcpy(szDescription, _T("www.showji.com示例服务,byyangwei@ligsoft.com"));

Description.lpDescription = szDescription;

::ChangeServiceConfig2(hService,SERVICE_CONFIG_DESCRIPTION, &Description);

::CloseServiceHandle(hService);

}

else

hr = AtlHresultFromLastError();

::CloseServiceHandle(hSCM);

}

}

}

OutputDebugString(L"TestWinService::RegisterAppIdFinished");

return hr;

}


3-3.添加执行函数:
添加声明:HRESULT CTestWinServiceModule::Run(intnShowCmd = SW_HIDE);
实现Run函数
HRESULT CTestWinServiceModule::Run(intnShowCmd) throw(){HRESULT hr = S_OK;hr =__super::PreMessageLoop(nShowCmd);if (hr == S_OK){if (m_bService){//可以在这里启动线程,或者什么其他东西来做自己的工作的啦//这里是什么都没有做了,只输出一条信息DWORD dwId = 0;m_hMainThread = NULL;m_hMainThread = CreateThread( NULL, 0,(LPTHREAD_START_ROUTINE)CMainThreadRun::Process, this, 0, &dwId);if (m_hMainThread == NULL ){OutputDebugString(L"CreateThreadFailed");}//上面这段代码是创建一个工作线程
OutputDebugString(L"TestWinService::Run");LogEvent(_T("widebright 的服务启动咯,呵呵"));SetServiceStatus(SERVICE_RUNNING);}//进入消息循环,不停的处理消息,可能最后分发到Handler去处理,调用了OnShutdown等函数的。__super::RunMessageLoop();}if (SUCCEEDED(hr)){hr =__super::PostMessageLoop();}
VC2008实现Windows服务程序 vc 实现安装程序
//可以在适当的时候调用Uninstall函数来卸载掉服务//__super::Uninstall();return hr;}

  

爱华网本文地址 » http://www.aihuau.com/a/25101013/181225.html

更多阅读

打印服务程序后台没有运行怎么办 打印后台程序服务

打印服务程序后台没有运行怎么办——简介打印服务程序后台没有运行怎么办,其实只要在后台开启即可,那么要怎么在后台开启打印服务程序呢?打印服务程序后台没有运行怎么办——工具/原料win xp打印服务程序后台没有运行怎么办——方法/

Win7旗舰版Windows Virtual PC虚拟机安装教程 windowsvirtual pc

最近和技术组几个兄弟一直忙着搞网站,做土豆系统等等,只顾着回答朋友们的问题,都没怎么发过分享帖。今晚分享下windows 7旗舰版专属虚拟机 Windows Virtual PC! 相比很多人众所周知,相比VM,Windows Virtual PC虚拟机的兼容性高出VM很多,而

强制删除,添加Windows服务 windows7强制删除文件

(一).强制添加一个服务SC Create "服务名" binPath= c:windows..... //这里binpath=后面必须要有一个空格才有效。 其他参数也如此。(二)强制删除一个Windows服务办法一: 用sc.exe这个Windows命令开始——运行——cmd.exe,然后输入sc就可

声明:《VC2008实现Windows服务程序 vc 实现安装程序》为网友哥從輕易淚分享!如侵犯到您的合法权益请联系我们删除