玩转Windows服务系列——使用Boost.Application快速构建Windows服务
玩转Windows服务系列——创建Windows服务一文中,介绍了如何快速使用VS构建一个Windows服务。Debug、Release版本的注册和卸载,及其原理和服务运行、停止流程浅析分别介绍了Windows服务的注册、卸载、运行、停止的简单流程。那么今天就来介绍一下如何使用开源库Boost.Application来快速构建一个Windows服务。
Boost.Application简介
Boost.Application 是一个开源的C++库,主要用于构建跨平台的服务,包括Windows、Unix、Linux、MaxOS等。没错,这个库可以用来做跨平台的服务。Boost.Application 使用开源协议 Boost Software License, Version 1.0。
Boost.Application 目前还不是Boost官方的库,想要使用它,需要到Github上下载最新代码,当前版本为0.4.12。
用Boost.Application构建Windows服务
第一步,用VS创建一个控制台程序。

第二步,配置Boost.Application以及Boost的include路径和lib路径。
第三步,将Boost.Application目录下的README.md文件中的示例代码拷贝到 myservice.cpp 中并覆盖原来所有的代码。
第四部,将编译选项设置为多字节

第五步,编译并运行程序

由于这时候还没有注册服务,所以以控制台的方式运行起来就会报错了。
第六步,将程序注册为Windows服务,在命令行中执行如下命令:
sc create myservice binpath= "D:\Code\C++\CommonCode\Win32\Debug\myservice.exe" type= own start= demand displayname= "service test"
sc命令的详细使用方法可以参考玩转Windows服务系列——命令行管理Windows服务。
在Windows服务管理器中可以看到刚刚创建的服务:

第七步,启动服务,然后停止服务,在服务所在目录,可以看到产生了一个log.txt文件,
Start Log...
-----------------------------
---------- Arg List ---------
-----------------------------
myservice
-----------------------------
0, running...
1, running...
2, running...
Stoping my application...
这样,一个完整的Windows服务就算完成了。
注册服务程序
在Boost.Application 的 “Boost.Application\example\setup”目录下,有一个用于注册卸载服务的示例代码。
将此示例代码编译为service_setup_ex.exe程序后,就可以使用此程序进行服务的注册和卸载了。
安装服务,支持设置程序路径、服务名字、显示名字、描述、启动模式、依赖服务等,如下:
service_setup_ex.exe -i --name="My Service" --path="c:\myservice\service.exe"
service_setup_ex.exe -i --name="My Service" --path="c:\myservice\service.exe" --display="My Service"
service_setup_ex.exe -i --name="My Service" --path="c:\myservice\service.exe" --display="My Service" --description "Service Description"
service_setup_ex.exe -i --name="My Service" --path="c:\myservice\service.exe" --user=".\Renato Tegon Forti" --pass="x1x1x1"
service_setup_ex.exe -i --name="My Service" --path="c:\myservice\service.exe" --start="manaul" --depends="service1\service2\service3"
检测服务:
service_setup_ex.exe -c --name="My Service"
卸载服务:
service_setup_ex.exe -u --name="My Service" --path="c:\myservice\service.exe"
参考资料
Build a Server Application using Application Library
系列链接
玩转Windows服务系列——Debug、Release版本的注册和卸载,及其原理
玩转Windows服务系列——无COM接口Windows服务启动失败原因及解决方案
玩转Windows服务系列——Windows服务启动超时时间
玩转Windows服务系列——使用Boost.Application快速构建Windows服务
玩转Windows服务系列——给Windows服务添加COM接口
玩转Windows服务系列——使用Boost.Application快速构建Windows服务的更多相关文章
- 快速构建Windows 8风格应用15-ShareContract构建
原文:快速构建Windows 8风格应用15-ShareContract构建 本篇博文主要介绍共享数据包.如何构建共享源.如何构建共享目标.DataTransferManager类. 共享数据包 Da ...
- 快速构建Windows 8风格应用14-ShareContract概述及原理
原文:快速构建Windows 8风格应用14-ShareContract概述及原理 本篇博文主要介绍Share Contract概述.Share Contract实现原理.实现Share Contra ...
- 快速构建Windows 8风格应用36-商店应用发布流程
原文:快速构建Windows 8风格应用36-商店应用发布流程 引言 在发布应用之前,我们需要注册开发者账号才能够发布应用.我们可以登录https://appdev.microsoft.com/Sto ...
- 快速构建Windows 8风格应用30-应用生命周期管理
原文:快速构建Windows 8风格应用30-应用生命周期管理 引言 Windows 8 中可以启动多个应用并在其中切换,我们没有必要担心降低系统速度或消耗电池电量. 因为系统会自动挂起(有时会终止) ...
- 快速构建Windows 8风格应用26-本地应用数据
原文:快速构建Windows 8风格应用26-本地应用数据 本篇博文主要介绍如何获取应用的设置和文件容器.如何将数据写入设置.如何从设置中获取数据.如何删除设置中数据.如何将数据写入文件.如何从文件中 ...
- 快速构建Windows 8风格应用27-漫游应用数据
原文:快速构建Windows 8风格应用27-漫游应用数据 本篇博文主要介绍漫游应用数据概览.如何构建漫游应用数据.构建漫游应用数据最佳实践. 一.漫游应用数据概览 1.若应用当中使用了漫游应用数据, ...
- 快速构建Windows 8风格应用17-布局控件
原文:快速构建Windows 8风格应用17-布局控件 本篇博文主要介绍三种常用的布局控件:Canvas.Grid.StackPanel. Panel类是开发Windows 8 Store应用中一个重 ...
- 快速构建Windows 8风格应用13-SearchContract构建
原文:快速构建Windows 8风格应用13-SearchContract构建 本篇博文主要介绍如何在应用中构建SearchContract,相应的原理已经在博文<快速构建Windows 8风格 ...
- 快速构建Windows 8风格应用9-竖直视图
原文:快速构建Windows 8风格应用9-竖直视图 本篇博文主要介绍竖直视图概览.关于竖直视图设计.如何构建竖直视图 竖直视图概览 Windows 8为了支持旋转的设备提供了竖屏视图,我们开发的应用 ...
随机推荐
- [翻译]开发文档:android Bitmap的高效使用
内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...
- SSH实战 · 用spring框架下的hibernatetemplate的get方法出现的问题
用get方法查询: return this.getHibernateTemplate().get(Product.class, pid); 出现错误为:id to load is requi ...
- 07. Web大前端时代之:HTML5+CSS3入门系列~H5 地理位置
Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 源码:https://github.com/duniti ...
- 在ubuntu16.10 PHP测试连接MySQL中出现Call to undefined function: mysql_connect()
1.问题: 测试php7.0 链接mysql数据库的时候发生错误: Fatal error: Uncaught Error: Call to undefined function mysqli_con ...
- linux应用调试技术之GDB和GDBServer
1.调试原理 GDB调试是应用程序在开发板上运行,然后在PC机上对开发板上得应用程序进行调试,PC机运行GDB,开发板上运行GDBServer.在应用程序调试的时候,pc机上的gdb向开发板上的GDB ...
- .Net Core上也可以使用的二维码组件
我Fork了QRCoder,并且兼容了.Net Core,图形库用的是ZKWeb.System.Drawing Github: https://github.com/zkweb-framework/Q ...
- “RazorEngine.Templating.TemplateParsingException”类型的异常在 RazorEngine.NET4.0.dll 中发生,但未在用户代码中进行处理 其他信息: Expected model identifier.
这个问题是由于在cshtml中 引用了model这个单词 它可能和Model在解析时有冲突. 解决方法:把model换成别的单词就可以了.
- Spring aop应用之实现数据库读写分离
Spring加Mybatis实现MySQL数据库主从读写分离 ,实现的原理是配置了多套数据源,相应的sqlsessionfactory,transactionmanager和事务代理各配置了一套,如果 ...
- FineBI:一个简单易用的自助BI工具
过去,有关企业数据分析的重担都压在IT部门,传统BI分析更多面向的是具有IT背景的人员.但随着业务分析需求的增加,很多公司都希望为业务用户提供自助分析服务,将分析工作落实到业务人员手中.但同时,分析工 ...
- [css]实现垂直居中水平居中的几种方式
转自博客 http://blog.csdn.net/freshlover/article/details/11579669 居中方式: 一.容器内(Within Container) 内容块的父容器设 ...