c#创建、安装、卸载、调试windows服务的简单事例
一、创建windows服务
1、用VS创建windows服务,结果如下:

2、删除默认生成的Service1.cs文件,然后创建自己的服务文件(如:MyService),并修改Program.cs文件的代码,如下:

此时,解决方案的目录结构如下:

3、双击MyService.cs服务文件,在左侧设计模式中,右键,点击“添加安装程序”,自动会生成Projectinstaller.cs文件以及两个安装组件,如下:

4、右键”ServiceProcessInstaller1“,选择属性,设置Account 帐号方式,建议为LocalService,如下:

5、右键”ServiceInstaller1“,选择属性,设置属性
a)Description 服务描述,直接显示到Windows服务列表中的描述;
b)DisplayName 服务显示名称,直接显示到Windows服务列表中的名称;
c)ServiceName 服务进程名称,安装与卸载服务时的唯一标识.
如下:

6、创建安装服务批处理文件Install.bat,可以创建记事本,然后修改后缀为bat,记事本内容如下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceDemo.exe
Net Start MyService
sc config MyService start= auto
pause
记事本另存为时设置编码为ANSI,如下图:

7、同理创建创建卸载服务批处理文件Uninstall.bat,内容如下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceDemo.exe
pause
此时解决方案的目录结构如下:

二、写服务代码
右键”MyService.cs“,选择查看代码,如下:
namespace WindowsServiceDemo
{
partial class MyService : ServiceBase
{
public MyService()
{
InitializeComponent();
} protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
} protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
}
}
}
下面实现自己的简单功能,代码如下:
using System;
using System.Diagnostics;
using System.IO;
using System.ServiceProcess;
using System.Timers; namespace WindowsServiceDemo
{
partial class MyService : ServiceBase
{
private Timer time = new Timer();
public MyService()
{
InitializeComponent();
} protected override void OnStart(string[] args)
{
WriteLog("服务启动,时间:"+DateTime.Now.ToString("HH:mm:ss") + "\r\n"); time.Elapsed += new System.Timers.ElapsedEventHandler(MethodEvent);
time.Interval = * ;//时间间隔为2秒钟
time.Start();
} protected override void OnStop()
{
WriteLog("服务停止,时间:" + DateTime.Now.ToString("HH:mm:ss") + "\r\n");
} private void MethodEvent(object source, System.Timers.ElapsedEventArgs e)
{
time.Enabled = false; string result = string.Empty;
string startTime = DateTime.Now.ToString("HH:mm:ss");
try
{
//......... result = "执行成功,时间为:"+ startTime;
}
catch (Exception exp)
{
result = "失败,原因:" + exp.Message;
}
finally
{
WriteLog(result); time.Enabled = true;
}
} /// <summary>
/// 日志记录
/// </summary>
/// <param name="logInfo"></param>
public void WriteLog(string logInfo)
{
try
{
string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\Logs";
if (!Directory.Exists(logDirectory))
{
Directory.CreateDirectory(logDirectory);
}
string filePath = logDirectory + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
File.AppendAllText(filePath, logInfo);
}
catch
{
}
}
}
}
具体功能是2秒钟执行一次,并记录日志。
三、安装windows服务
重新生成整个解决方案,成功后,从项目所在文件夹赋值bin文件到某个自定义的文件夹,并将Install.bat和Uninstall.bat复制到bin下的Debug文件夹中。
以管理员身份运行Install.bat安装服务,成功结果如下图:

这是右键“我的电脑”,选择“管理”,选择“服务”,就可以看到服务已安装,如下图:

同时,Debug文件夹里有了Logs文件,Logs文件夹里有txt文档,内容如下:

可以看到没2秒钟执行一次。
四、卸载windows服务
卸载服务,同样以管理员身份运行Uninstall.bat即可。
五、调试windows服务
打断点,在工具栏选“调试”下的“附加到进程”,附加自己的服务即可调试。
c#创建、安装、卸载、调试windows服务的简单事例的更多相关文章
- C# Asp.net Quartz.NET作业调度之创建、安装、卸载、调试windows服务的简单事例
一.创建windows服务 1.用VS创建windows服务,结果如下: 2.删除默认生成的Service1.cs文件,然后创建自己的服务文件(如:MyService),并修改Program.cs文件 ...
- .net Windows服务程序和安装程序制作图解 及 VS 2010创建、安装、调试 windows服务(windows service)
.net Windows服务程序和安装程序制作 最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作 ...
- VS创建、安装、调试 windows服务(windows service)
1.创建 windows服务 项目 文件 -> 新建项目 -> 已安装的模板 -> Visual C# -> windows ,在右侧窗口选择"windows 服 ...
- C# VS 2010创建、安装、调试 windows服务(windows service)
在一个应用程序中创建多个 windows 服务的方法和 1083 的解决办法 错误解决方案 ------------------------------------------------------ ...
- 调试windows服务最简单的方法之一
先看一下这段启动代码: using System; using System.Collections.Generic; using System.Linq; using System.ServiceP ...
- C#创建、安装、卸载、调试Windows Service(Windows 服务)的简单教程
前言:Microsoft Windows 服务能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面.这 ...
- C# Windows服务创建安装卸载
一.创建Windows服务 使用VS创建一个新的windows服务应用程序 创建完成之后 二.相关配置 修改Service1名称为StartService(可以不改,自行选择) 添加安装程序并修改配置 ...
- 如何创建一个标准的Windows服务
出处:http://www.cnblogs.com/wuhuacong/archive/2009/02/11/1381428.html 如何创建一个标准的Windows服务 在很多时候,我们需要一个定 ...
- Windows服务二:测试新建的服务、调试Windows服务
一.测试Windows服务 为了使Windows服务程序能够正常运行,我们需要像创建一般应用程序那样为它创建一个程序的入口点.像其他应用程序一样,Windows服务也是在Program.cs的Main ...
随机推荐
- 【BZOJ3531】[Sdoi2014]旅行 树链剖分+动态开点线段树
[BZOJ3531][Sdoi2014]旅行 Description S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天 ...
- java线程详解
Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...
- 关于struts2中表单提交时,中文乱码问题的解决
http://blog.csdn.net/hjw506848887/article/details/8966194 今天写项目时,突然遇到了struts2中表单提交的中文乱码问题,调了好久就是不知道答 ...
- Android的Proxy/Delegate Application框架 (主要介绍插件化开发)
1. 插件化的原理 是 Java ClassLoader 的原理:Java ClassLoader基础 常用的其他解决方法还包括:Google Multidex,用 H5 代替部分逻辑,删无用代码,买 ...
- BZOJ3835: [Poi2014]Supercomputer
Description Byteasar has designed a supercomputer of novel architecture. It may comprise of many (id ...
- docker WARNING: bridge-nf-call-iptables is disabled 处理
在CentOS中 vim /etc/sysctl.conf net.bridge.bridge-nf-call-ip6tables = net.bridge.bridge-nf-call-iptabl ...
- linux top 参数详解
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法. top - 01:06:48 up 1:22, ...
- C#多线程操作界面控件的解决方案(转)
C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...
- js判断移动端系统
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...
- [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
17.8 You are given an array of integers (both positive and negative). Find the contiguous sequence w ...