在Windows中,对于一些不需要显示图形界面的应用程序,我们可以把它做成Windows服务,让它在后台运行,例如一些文件监视服务等。一台电脑中的Windows服务可以在“计算机-管理-服务应用程序-服务”中看到,如图:

在这里,我们可以启动或停止一个服务。

创建服务:

下面我们来创建一个文件监视功能的Windows服务。

用VS新建一个项目,模版选择“Windows服务”,在服务代码中会有两个方法:OnStart与OnStop,分别是服务的启动时的执行代码与服务停止时的执行代码。

public partial class WatchService : ServiceBase{public WatchService(){InitializeComponent();}FileSystemWatcher watcher;/// <summary>/// 服务开始时执行代码/// </summary>/// <param name="args"></param>protected override void OnStart(string[] args){WriteLog("服务开始");string path = @"D:\text";watcher = new FileSystemWatcher(path);// 监视新增文件watcher.NotifyFilter = NotifyFilters.FileName;//同时监视子目录watcher.IncludeSubdirectories = true;watcher.Created += new FileSystemEventHandler(watcher_Changed);watcher.EnableRaisingEvents = true;}/// <summary>/// 服务停止时执行代码/// </summary>protected override void OnStop(){WriteLog("服务停止");}private void watcher_Changed(object sender, FileSystemEventArgs e){try{WriteLog(e.Name + " " + e.ChangeType);}catch (Exception ex){WriteLog(ex.ToString());}}/// <summary>/// 写日志的方法/// </summary>/// <param name="msg"></param>private void WriteLog(string msg){string path = @"D:\log.txt";using (StreamWriter sw = new StreamWriter(path, true)){sw.WriteLine(DateTime.Now.ToString() + " " + msg);}}}

发布服务:

转到服务的界面窗体,点击右键,选择添加安装程序,会出现一个ProjectInstaller.cs。在其界面窗体中,选择serviceInstaller1,右键属性,可以设置服务启动方式,服务名称(服务名称不能与其它Windows服务名称重名),服务描述,服务显示名称等,如图:

另一个serviceProcessInstaller1的属性可以设置服务的运行账户,如图:

完成这些设置后,重新生成服务,打开VS2010命令行工具,以管理员身份运行,输入命令InstallUtil.exe+服务程序地址,如InstallUtil.exe “D:\Service\FileWatchDemo.exe”

如果通过命令行工具,则可以在C:\Windows\Microsoft.NET\Framework\v2.0.50727或C:\Windows\Microsoft.NET\Framework\v4.0.30319目录中找到InstallUtil.exe

提示安装完成后,就可以在服务管理中看到刚刚安装的服务了。

删除服务:

InstallUtil.exe /u +"服务地址" InstallUtil.exe /u "D:\Service\FileWatchDemo.exe"

SC delete +服务名称,如 sc delete FileWatchService

调试服务:

因为服务不能直接在VS里面启动调式,若要调试服务一般是在服务安装后通过附加进程的方式来调试。更好的做法是我们先建一个控制台或winform类型的测试项目,在测试项目中做调试然后再部署成Windows服务。

Windows服务初探相关推荐

  1. 用.Net开发Windows服务初探

    用.Net开发Windows服务初探 1 什么是Windows服务         Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合.它没有用户界面,并且也不会产生任何 ...

  2. 利用vs.net快速开发windows服务(总结)

    引用 http://www.cnblogs.com/lovecherry/archive/2005/03/25/125527.html 在很多应用中需要做windows服务来操作数据库等操作,比如 ( ...

  3. .Net Core快速创建Windows服务

    1.新建.Net Core控制台程序,添加新建项Windows服务: 修改Progran.cs: class Program{static void Main(string[] args){Servi ...

  4. C#创建Windows服务

    利用VS.NET创建C# Windows服务 在很多应用中需要做windows服务来操作数据库等操作,比如 (1)一些非常慢的数据库操作,不想一次性去做,想慢慢的通过服务定时去做,比如定时为数据库备份 ...

  5. C#实现一个用于开机启动其他程序的Windows服务

    今天决定写写博客,不为别的,只当自己的积累,如果与此同时能不误导他人甚至给了朋友们一些启发,那真是更好了! 程序的目的和用途: 很多开机启动程序仅仅加在启动项里面,只有登陆后才真正启动.windows ...

  6. 用.NET创建Windows服务

    用.NET创建Windows服务 译者说明:我是通过翻译来学习C#的,文中涉及到的有Visual Studio.NET有关操作,我都根据中文版的VS.NET显示信息来处理的,可以让大家不致有误解. 作 ...

  7. 用C#创建Windows服务(Windows Services)

    转载自 hyslove 最终编辑 hyslove Windows服务在Visual Studio 以前的版本中叫NT服务,在VS.net启用了新的名称.用Visual C# 创建Windows服务不是 ...

  8. java建立_利用Java创建Windows服务

    1.Java测试代码 importorg.apache.log4j.Logger;public classTest {private static Logger logger = Logger.get ...

  9. 更上层楼:动态安装你的windows服务

    前言:先说明一下本文示例windows服务的简单需求,即根据外部配置实现不同方式记录日志的功能.记录日志的方式有三种,分为文本记录.数据库记录以及文本和数据库同时记录日志.如您所知,这个功能基本上没有 ...

最新文章

  1. centos6.5-vsftp搭建
  2. 八、pyqt5按钮类控件——QPushButton、QRadioButton、QCheckBox
  3. windows7x64安装小记
  4. OSError: Could not find kaggle.json
  5. Job System之Hello World
  6. git项目初始上传服务器,快速架设一个使用 SSH 的 Git 服务
  7. 5分钟搞懂如何在Spring Boot中Schedule Tasks
  8. 计算机视觉论文-2021-12-01
  9. 统计推断—参数估计—点估计、区间估计、t分布、Z分布
  10. 计算机如何设置网络,如何设置宽带连接
  11. win2016开启ntp_WindowsServer2016NTP服务端和客户端配置【NTP时间同步服务器】
  12. 对比俩个List之间的差异
  13. 操作系统---信号量
  14. Storm示例剖析-fastWordCount
  15. jdk+apache+jboss+mod_jk+openssl--从零开始搭建Linux测试环境
  16. MySQL数据库13——插入数据(INSERT)
  17. Java(老白再次入门) - 数组
  18. UVA10815-Andy's First Dictionary 【set】
  19. android中api简介
  20. Vue2.0实现炫酷的主题切换功能

热门文章

  1. 高精度定位!“天地一体”基础设施助中国北斗在商用领域“弯道超车”
  2. 阿里巴巴年度技术总结:人工智能在搜索的应用和实践
  3. Linux 受到开发者偏爱的 9 个理由!
  4. 漫画 | 在中国,程序媛到底有多难?
  5. 漫画:如何在数组中找到和为 “特定值” 的三个数?
  6. 区块链软件公司用区块链技能重塑科学出书社
  7. IP Header包
  8. 后端服务性能压测实践
  9. flask中的request
  10. gmock学习02---编写自己的Matcher与如何让编译器识别被mock的重载函数