一、创建 Windows 服务程序

  1、文件 → 新建 → 项目 → 选择 Windows 服务模板,创建 WinService 项目;

  选择这个服务的属性,可以打开属性对话框。可配置如下值:

  [1] AutoLog 指定把启动和停止服务的事件自动写到事件日志中;

  [2] CanPauseAndContinue、CanShutdown 和 CanStop 指定服务可以处理暂停、继续、关闭和停止服务的请求;

  [3] ServiceName 是写到注册表中的服务的名称,使用这个名称可以控制服务;

  [4] CanHandleSessionChangeEvent 确定服务是否能处理终端服务器会话中的改变事件;

  [5] CanHandlePowerEvent 选项对运行在笔记本电脑或移动设备上的服务有效。如果启用这个选项,服务就可以响应低电源事件,并相应的改变服务的行为。

  注意:在服务开发的初始阶段,一定要在属性窗口把服务的名称改为比较适当的名称。

  

二、添加服务安装程序

  切换到服务程序设计试图,右键 → 添加安装程序,给服务添加安装程序。使用 “ 添加安装程序 ”选项时,新建一个 ProjectInstaller 类、一个ServiceInstaller 实例 和 一个 ServiceProcessInstaller 实例。

  1、安装程序类

  ProjectInstaller 类派生自 System.Configuration.Install.Installer,后者是所有自定义安装程序的基类。

  2、ServiceProcessInstaller 类 和 ServiceInstaller 类

  在 InitializeComponent() 方法的实现代码中,创建了 ServiceProcessInstaller 类 和 ServiceInstaller 类的实例。这两个类都派生于 ComponentInstaller 类本身派生于 Installer 类。

  注意:一个服务进程可以包括多个服务。ServiceProcessInstaller 类用于配置进程,为这个进程中的所有服务定义值,而 ServiceInstaller 类用于服务的配置,因为每个进程都需要 ServiceInstaller 类的一个实例。如果进程中有3个服务,则必须添加3个 ServiceInstaller 对象。

  3、ServiceInstallerDialog 类

  System.ServiceProcess.Design 名称空间中的另一个安装程序类是 ServiceInstallerDialog。在安装过程中,如果希望系统管理员输入该服务应使用的账户(具体方法是指用户名和密码),就可以使用这个类。

  4、安装 和 卸载服务

  (一)安装命令安装

  使用 installutil.exe 实用程序:

  [1] 安装命令:installUitl 服务名.exe,如下:

  

  [2] 卸载命令:installUitl /u 服务名.exe

  

  (二)安装程序安装

  1、添加安装程序:解决方案(右击)→ 添加 → 新建项目 → 其他项目类型 → 安装和部署 → Visual Stadio Installer → 安装项目   如图 :

  

 
     2、创建后,安装项目(右击) → 视图 → 文件系统 如图:
  
 

3、由于我们是安装服务,就不需要用户桌面和程序菜单了,直接 应用程序文件夹(右击)→ 添加 → 项目输出 入图 :

  

  注意:

  [1] 项目选择中选择要安装的服务;[2] 项目选择下面要选择主输出。选择好后确定,这一步增加了安装程序的文件夹,下一步就是给这个安装程序增加操作。

  4、这里增加两个基本操作,一个是安装,一个是卸载。安装项目(右击) → 视图 → 自定义操作 如图:

  

  上面可以看到有安装,提交,回滚,卸载等操作,我们先增加安装操作,安装(右击)→ 添加自定义操作, 如图:

  

选择应用程序文件夹,并选中之前增加的主输出项,确定,这样这个安装程序就增加了安装的操作,同样按照这样的方式增加卸载操作,卸载与安装唯一不同的是需要设置一个命令参数,不可少,如图:

  

这里 Arguments 里输入 /u  表示卸载命令相当于 InstallUtil.exe /u 服务路径  , 到这里 ,安装程序就制作好了,生成安装程序项目,将会生成 setup.exe 和 setup.msi 安装文件,拷贝到客户端,点击setup.exe 就像安装QQ一样安装我们的服务。

Windows Service 之 详解(二)的更多相关文章

  1. NetCore Selfhost,IIShost,Windows Service Host详解(自宿主、宿主在IIS,宿主在Windows Service中)

    第一部分.自托管 一.依赖.Net Core环境 修改 project.json 文件内容,增加发布时需要包含文件的配置内容(NetCore2.0版本不需要任何设置,NetCore2.0开始彻底放弃p ...

  2. Windows Service 之 详解(一)

    一.Windows 服务简介 Windows 服务是可以在系统启动时自动打开的(不需要任何人登录计算机)的程序. 1.适合创建Windows 服务的场景: [1] 在没有用户交互操作的情况下运行程序: ...

  3. windows socket函数详解

    windows socket函数详解 近期一直用第三方库写网络编程,反倒是遗忘了网络编程最底层的知识.因而产生了整理Winsock函数库的想法.以下知识点均来源于MSDN,本人只做翻译工作.虽然很多前 ...

  4. Python调用windows下DLL详解

    Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...

  5. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

  6. 重装Windows系统 入门详解 - 基础教程

    重装Windows系统 入门详解 - 基础教程 JERRY_Z. ~ 2020 / 10 / 13 转载请注明出处!️ 目录 重装Windows系统 入门详解 - 基础教程 一.说明 二.具体步骤 ( ...

  7. windows 安装Git详解

    windows 安装Git详解 一.Git简介 Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Lin ...

  8. Shiro 安全框架详解二(概念+权限案例实现)

    Shiro 安全框架详解二 总结内容 一.登录认证 二.Shiro 授权 1. 概念 2. 授权流程图 三.基于 ini 的授权认证案例实现 1. 实现原理图 2. 实现代码 2.1 添加 maven ...

  9. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

随机推荐

  1. Codeforces Round #365 (Div. 2) C - Chris and Road 二分找切点

    // Codeforces Round #365 (Div. 2) // C - Chris and Road 二分找切点 // 题意:给你一个凸边行,凸边行有个初始的速度往左走,人有最大速度,可以停 ...

  2. ArrayList、LinkedList、HashMap的遍历及遍历过程中增、删元素

    ArrayList.LinkedList.HashMap是Java中常用到的几种集合类型,遍历它们是时常遇到的情况.当然还有一些变态的时候,那就是在遍历的过程中动态增加或者删除其中的元素. 下面的例子 ...

  3. HttpComponents 学习的两个重要文档

    httpcore-tutorial-simplified-chinese httpclient-tutorial-simplified-chinese

  4. mysql的登录密码带特殊符号登录不进去的问题

    eg : mysqldump -u root -p)P:9 ${dbname} > $dataPath$filename 当我将数据库的数据每天进行自动导出时,需要带上密码,但 ) 是一个特殊符 ...

  5. 设置mysql 在mac中的环境变量

    在mac os的用户目录下有一个隐藏文件.bash_profile,编辑它就可以完成环境变量的创建. 比如要将mysql的运行目录加到环境变量中,可以在.bash_profile中新增如下一行: ex ...

  6. java识别文件或字符串的编码格式

    1, 用juniversalchardet: http://code.google.com/p/juniversalchardet/ 官方示例: import org.mozilla.universa ...

  7. java的Socket通信例子及关于java.net.SocketException: Socket is closed错误

    今天写socket数据相互通信的时候,碰到一个及其蛋疼的错误.单向传输数据的时候server与client是没有问题的,但是两个都有输入输出操作的时候就出现了这个问题 java.net.SocketE ...

  8. VIM技巧(2)-删除匹配行

    VIM技巧(2)-删除匹配行 代码如下: * @Company:中国股份有限公司 * @author ymzhao (也有zyyang的) * @Date: Jan 22, 2014 11:25:29 ...

  9. 应用反射写的tostring方法

    应用反射写的tostring方法 应用反射写的tostring方法,方便以后查询 代码 package com.chzhao.reflecttest; import java.lang.reflect ...

  10. Linux平台部署varnish 高性能缓存服务器

    一:varnish部署前准备: 1.1相关软件以及系统,web服务 系统要求:Centos 6(以上) (64位) 相关中间件:varnish-4.0.2 1.2相关系统依赖包安装检查准备 1.2.1 ...