C# windows服务制作(包括安装及卸载)
开篇语
因工作内容需要做一个windows服务,此前并没有相关经验,所以做了一个demo来跑跑这个梗(高手跳过,需要的来踩)~
效果如下:打开服务,可以找到我们新增的一个windows服务,这个demo是定时向一个txt文件输出一句话

生成的以日期命名的txt文件

打开文件结果如下:

全过程梳理
本文将只粗略简单的介绍一下windows服务是如何开发和安装的
一、创建windows服务
如图新建一个Windows服务

进入程序如图


空白服务如下
public partial class Service1 : ServiceBase
{
System.Threading.Timer recordTimer; public Service1()
{
InitializeComponent();
} protected override void OnStart(string[] args)
{
} protected override void OnStop()
{
}
}
只要在OnStart里完成你的功能代码即可。本例中我们做一个定时向本地文件写记录的功能。
创建一个类,用户写文件
/// <summary>
/// 保存至本地文件
/// </summary>
/// <param name="ETMID"></param>
/// <param name="content"></param>
public static void SaveRecord(string content)
{
if (string.IsNullOrEmpty(content))
{
return;
}
FileStream fileStream = null;
StreamWriter streamWriter = null;
try
{
string path = Path.Combine(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase, string.Format("{0:yyyyMMdd}", DateTime.Now)); using (fileStream = new FileStream(path, FileMode.Append, FileAccess.Write))
{
using (streamWriter = new StreamWriter(fileStream))
{
streamWriter.Write(content); if (streamWriter != null)
{
streamWriter.Close();
}
} if (fileStream != null)
{
fileStream.Close();
}
}
}
catch { }
}
如图那么在Service1中调用
public partial class Service1 : ServiceBase
{
System.Threading.Timer recordTimer;
public Service1()
{
InitializeComponent();
} protected override void OnStart(string[] args)
{
IntialSaveRecord();
}
/// <summary>
/// 定时检查,并执行方法
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
private void IntialSaveRecord()
{
TimerCallback timerCallback = new TimerCallback(CallbackTask); AutoResetEvent autoEvent = new AutoResetEvent(false);
recordTimer = new System.Threading.Timer(timerCallback, autoEvent, , );//其中参数10000表示延时执行服务的时间间隔,毫秒为单位
}
//方法
private void CallbackTask(Object stateInfo)
{
Show_Java.SaveRecord(string.Format(@"当前记录时间:{0},状况:程序运行正常!", DateTime.Now));
} protected override void OnStop()
{
if (recordTimer != null)
{
recordTimer.Dispose();
}
}
}
安装程序
这样服务算是写的差不多了,下面添加一个安装程序,用于安装服务。
如图,在service1页面空白处右键-添加安装程序

添加一个安装程序,如图,添加完成后

设置相应的属性,给serviceInstaller1设置属性,主要是描述信息。如图,

给serviceProcessInstaller1设置,主要是account。一般选localsystem,如图

这样服务已经写好了。那么如何添加到windows服务里面去呢。这里推荐一种简单实用的方法(也可以通过代码来安装,这里就不做过多讲解了)
安装服务
上面写好的服务,最终生成的是一个exe文件。如图,

安装程序安装时需要用到这个exe的路径,所以方便起见,将这个生成的exe文件拷贝至安装程序的运行目录下。(这里我将exe拷贝到D盘shows文件夹下面)

用管理员权限打开cmd窗口

然后分别执行
@SET FrameworkDir=%WINDIR%\Microsoft.NET\Framework
@SET FrameworkVersion=v2.0.50727
@SET PATH=%FrameworkDir%\%FrameworkVersion%;%WINDIR%\System32;%PATH%;
InstallUtil.exe D:\路径\程序名称.exe //安装服务
InstallUtil.exe /u D:\路径\程序名称.exe //卸载服务(程序安装好了,如果想要修改,需要先卸载该服务,再次执行安装)

运行后若无错误,效果应该如下

运行完后在服务中查看,如图:

再在安装目录下看记录的文件(因为我们设置项目的时候选的是手动,此时要记住启动该服务,程序才会定时执行)


这样,一个windows服务算是安装成功了。(方法多种多样,希望各位多提宝贵意见,不胜感激~)
C# windows服务制作(包括安装及卸载)的更多相关文章
- .net windows 服务创建、安装、卸载和调试
原文:http://blog.csdn.net/angle860123/article/details/17375895 windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境 ...
- Windows服务BAT命令-安装、卸载、启动、停止
1.安装服务 %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe D:\WiseMES\MES.WindowsService ...
- 关于windows服务的编写/安装/与调试
前注: 首先,这篇文章是从网上转过来的,因为最近有个项目,需要编写一个Windows Service来定时执行程序,网上很容易找到了这篇文章,大概看了一下,文章讲的还是很详细的.不过这篇文章应该是.n ...
- 安装sqlserver 的时候 报错:无法通过Windows功能控制面板自动安装或卸载Windows Server 角色和功能。
无法安装以下功能:.NET Framework 3.5(包括.NET2.0和3.0) 无法通过Windows功能控制面板自动安装或卸载Windows Server 角色和功能. 若要安装Windows ...
- Windows服务创建及安装
Windows服务创建及安装http://www.cnblogs.com/tuyile006/archive/2006/11/27/573654.html
- C# 操作windows服务[启动、停止、卸载、安装]
主要宗旨:不已命令形式操作windows服务 static void Main(string[] args) { var path = @"E:\开发辅助项目\WCF\WCF.Test\WC ...
- C# windows 服务编写及安装
最近项目中用到window服务程序,以前没接触过,比较陌生,花了两天的时间学习了下,写了个简单的服务,但在制作安装程序的时候,参照网上很多资料,却都制作不成功,可能是开发环境或项目配置的不同,这里 ...
- c# windows服务 一个项目安装多个服务
创建windows服务就不讲解了,其它大神写太多了.这里只写一个项目安装多个服务的教程.如:http://www.cnblogs.com/zzgblog/p/4595839.html 首先按下图创建多 ...
- 基于C#&.net2.0的windows服务创建与安装
起因:一台服务器中部署的程序,停电后未按照计划任务正常启动. 一.创建并配置Windows服务程序 开发工具VS2015 Framework版本2.0 1.新建Windows服务 2.在Service ...
随机推荐
- win10 环境 gitbash 显示中文乱码问题处理
gitbash 是 windows 环境下非常好用的命令行终端,可以模拟一下linux下的命令如ls / mkdir 等等,如果使用过程中遇到中文显示不完整或乱码的情况,多半是因为编码问题导致的,修改 ...
- 用html5的canvas和JavaScript创建一个绘图程序
本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...
- 前端常用的WindowsCMD命令
前面的话 在网上找了一些关于命令提示符CMD的资料,但是很多资料都是把所有的功能罗列出来,大部分都不会用到.所以,自己把常用的CMD命令总结如下,方便查阅 操作类 help 列出所有支持的指令及说 ...
- 创建几个常用table展示方式插件
这次和大家分享的是自己写的一个table常用几种展示格式的js插件取名为(table-shenniu),样式使用的是bootstrap.min.css,还需要引用jquery.min.js包,这个插件 ...
- PHP-----文件系统的交互
本文讲解php中于文件交互中所使用的函数 代码示例 <html> <head> <title> File Detail </title> </he ...
- Java进击C#——前言
本章简言 记得三年前笔者来到现在的公司的时候,公司人口不出十个人.那个时候笔者刚从日本回来,想在福州.厦门.青岛找一个合适自己发展的机会.最后我的一个福州的朋友打电话希望我能过去帮他,跟他一起创业.这 ...
- angular2之前端篇—1(node服务器分支)
上一篇.net core和angular2之前端篇-1 使用的是dotnet模板.之所以用它,因为想用他写webapi,但是写道下一篇的时候遇到点问题,所以先写个分支测试一下.这次是用Node作为服务 ...
- Android Studio开发RecyclerView遇到的各种问题以及解决(一)
以前一直在用ListView,,,最近才看RecyclerView发现好强大.RecyclerView前提是Android版本在5.0以上,本人以前用的是eclipse只支持到4.4.索性就安装一个A ...
- 编译器开发系列--Ocelot语言1.抽象语法树
从今天开始研究开发自己的编程语言Ocelot,从<自制编译器>出发,然后再自己不断完善功能并优化. 编译器前端简单,就不深入研究了,直接用现成的一款工具叫JavaCC,它可以生成抽象语法树 ...
- SQL 约束
先用设计器创建约束.再用代码创建约束.数据库约束是为了保证数据的完整性(正确性)而实现的一套机制见文件Employee.sql非空约束(选择复选框)主键约束(PK) primary key const ...