同事问到windows service的东东,现在整理一下,用c#如何创建一个windows service,以及如何调试、部署、卸载。

一、创建windows service

1. 打开VS2008,新建一个Project, Project类型选择Visual C#-Windows,在Templates中选择Windows Service, 其他可以默认,点击OK。

2. 在Solution Explorer中会看到自动产生了三个文件:app.config, Program.cs,Service1.cs,其中app.config可以添加一些自定义的配置信息,供代码文件使用;Program.cs提供了Main()方法,作为程序的人口,一般不需要修改;Service1.cs就是要实现的服务。

3. 双击打开Service1.cs,会默认打开Service1.cs[Design],在这个界面可以拖拽一个组件,此外,在Properties中,会看到一些关于这个service的属性设置,比如AutoLog(True:使用windows event log记录该service的日志;False:用户可以自定义自己的event Log),CanPauseAndContinue(True:可以处理暂停和继续该服务的操作;False:不可以处理暂停或者继续该服务的操作),ServiceName(用于让Service Control Manager识别的服务名称)。

4. 转到Code视图,可以看到默认生成了一个构造函数,和两个需要重写的方法OnStart和OnStop,我们需要覆写这两个方法。下面是简单重写了OnStart方法。

   protected override void OnStart(string[] args)    {             string path = @"d:\share\test.txt";             StreamWriter sw;             sw = new StreamWriter(path);             foreach (string arg in args) sw.WriteLine(arg);             sw.Close();             sw.Dispose();    } 这样最基本的一个windows service就搞定了,但是能否正常运行,我们需要调试一把。

二、调试windows service

通常,我们用的调试方法是需要把服务部署好,然后attach to process...,找到对应的服务进程,予以调试。但是操作比较繁琐,修改完服务后,需要卸载服务,然后重新部署,并且OnStart方法难以调试。从网络上找到一个好的调试方法,并尝试通过,很好用的,推荐给大家:)

1. 在Service1.cs中添加public方法,将需要调试的protected方法进行封装,供Main()调用,以调试OnStart()为例:

  public void start(string[] args)   {             this.OnStart(args);   }

2. 在Main()中添加下面的代码,在人机交互时执行:

     if (Environment.UserInteractive)             {                 Service1 s = new Service1();                 string[] args = { "a", "b" };                 s.start(args);                 Console.WriteLine("the service is started");                 Console.ReadLine();                 s.stop();                 Console.WriteLine("the service is stopped");             }             else             {                 ServiceBase[] ServicesToRun;                 ServicesToRun = new ServiceBase[]          {           new Service1()          };                 ServiceBase.Run(ServicesToRun);             }

3. 更改Project的输出类型

右击该Project,点击Properties,在Application标签中,更改Output Type为Console Application。

好了,这样就可以按F5调试了:)

三、部署

1. 在Service1.cs的design视图中,右击鼠标,点击Add Installer,会自动创建一个ProjectInstall.cs文件,在design视图中,有两个组件serviceProcessInstaller1:这个组件的属性有一个叫Accout,默认是User,这样在部署的时候需要输入用户名和密码,这里我们可以选择权限最小的Localservice,当然要获得更多的权限可以设置其它两个network service和local

serviceInstaller1:与服务本身相关的信息,比如服务名,服务描述,显示名称,启动类型等。

2. 如果使用系统默认的event log,那么现在就可以编译然后部署了;如果使用了自定义的event log,则需要在ProjectInstaller中修改部分代码。

3. 使用installutil.exe部署windows service

(注意权限,这里需要用Administrator用户去部署,否则会提示一些错误信息:比如An exception occurred during the Install phase. System.Security.SecurityException: The source was not found, but some or all eve nt logs could not be searched.  Inaccessible logs: Security. 或者 access is denied)

runas /user:Administrator cmd

cd C:\Windows\Microsoft.NET\Framework\v2.0.50727

installutil D:\project\WindowsService1\WindowsService1\bin\Debug\windowsservice1.exe

到此就部署完成了。

四、卸载服务

installutil /u D:\project\WindowsService1\WindowsService1\bin\Debug\windowsservice1.exe

五、启动服务

1. 在启动服务时,有时候会出现服务启动后又停止的错误提示信息,指出该服务可能没有被使用,我们可以查看eventvwr,里面会给出足够的错误信息,根据错误信息调整service代码就可以了,也有可能是因为服务要操作文件,没有权限的原因,这时候把要操作的文件权限放开就可以了。

2. 启动服务的时候,由于权限问题启动失败,我们可以设置启动的账号。

3. windows service的参数是在启动时一次传递的,可以以界面形式传入参数,也可以通过命令行的形式:sc start service1 arg0 arg1 ...

转载于:https://www.cnblogs.com/stanley107/archive/2013/02/22/2922571.html

用VS(c#)创建、调试windows service以及部署卸载相关推荐

  1. C#创建一个Windows Service

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  2. 创建一个Windows Service应用程序

    创建一个Windows Service应用程序 下载本文代码 见资源 正是由于.NET Framework的出现,才使你能够构建出在系统重新启动时自动运行的.无人参与的(unattended)应用程序 ...

  3. Windows Service:用C#创建Windows Service

    现在的.NET框架已经为Windows service的开发提供足够强大的支持,你只需要关注service所要实现的逻辑,而完全不用关心service底层是如何实现的,相比以前用MFC来说,真是质的飞 ...

  4. Windows service无法删除怎么办?

    自己用c#创建的windows service, 安装后,执行installutil /u 状态变成disable,却删除不了.删除的时候提示"The specified service h ...

  5. .net windows service开发与安装

    1.创建一个Windows Service项目名为WindowsServiceTest: 2.添加一个Windows Service项名为TestService.cs: 3.实现TestService ...

  6. 如何彻底的卸载和删除Windows service

    最近遇到很头疼的问题,安装到服务器的Windows Service卸载的时候出错了,结果在服务列表中就一直驻留,并且系统进程一直在运行,怎么都杀不掉. 最后终于找到办法了: 1.常规做法,批处理命令卸 ...

  7. 【windows service】C# 创建Windows Service(Windows服务)程序

    C# 创建Windows Service(Windows服务)程序 很多年前大概08年做了一个windows桌面程序推送邮件给用户的程序,然后通过windows 计划任务每隔N分钟重复执行. 今天闲暇 ...

  8. C# 创建Windows Service(Windows服务)程序

    工具: Visual Studio Community 2015 写在前面: Windows可以在后台做一些任务,今天分享下Windows Service创建.安装.调试的方法以及一些异常问题的处理 ...

  9. 创建Windows Service

    基本参照使用C#创建Windows服务,添加了部分内容 目录 创建Windows Service 可视化管理Windows Service 调试 示例代码 创建Windows Service 选择C# ...

最新文章

  1. iOS NSRunloop 详解
  2. 送你8个Python高效数据分析的技巧(附代码)
  3. Python语言学习之lambda:lambda函数的简介、使用方法、案例大全之详细攻略
  4. 大数据治理需要具备哪些能力和关键技术?
  5. Fiddler抓包使用教程-扫盲篇
  6. 数字金字塔(信息学奥赛一本通-T1258)
  7. 最新斗鱼JS逆向分析
  8. 上车,在北京地铁10号线偶遇一下
  9. java web流量阀值_Javaweb应用使用限流处理大量的并发请求详解
  10. 看 设计模式之策略模式探讨初步 有感,并摘取部份内容,学习之
  11. 【软件工具】之录屏软件 Captura
  12. java编译成exe_java编译成exe
  13. C语言文件加密解密软件
  14. 你好,Googler!
  15. 技嘉1080显卡体质测试软件,技嘉AORUS GTX 1080 Gaming Box
  16. 交叉编译openssl(arm和x86_64)
  17. 联想笔记本键盘亮屏幕不亮_联想笔记本电脑开机键亮但是黑屏 联想笔记本电脑键盘失灵怎么办...
  18. 自然数幂和伯努利数(Bernoulli)
  19. 不仅仅可以用来做爬虫,Puppeteer 还可以干这个!
  20. Adobe国际认证证书对职业应聘有用吗?

热门文章

  1. computed set 自定义参数_完全理解Vue的渲染watcher、computed和user watcher
  2. 小程序客服消息推送自动回复_如何让小程序客服消息根据用户输入关键词自动回复图片?...
  3. mysql 最小日期函数_MySQL 日期加减函数汇总
  4. LabVIEW纹理分析(基础篇—9)
  5. 【lidar】3D目标检测PointPillars:论文解读、代码解读、部署实现(1)
  6. ROS系统中实现点云聚类(realsense数据源)
  7. tensorflow models 工程解析
  8. Yolo(3)(项目)Yolo v3 目标检测(85分类)
  9. OpenCV(十九)直方图(直方图计算、掩膜、均衡化、自适应均衡化)
  10. python计算机视觉常见报错及解决方案(不断更新中)