C# Windows服务创建安装卸载

一、创建Windows服务

使用VS创建一个新的windows服务应用程序

创建完成之后

二、相关配置

修改Service1名称为StartService(可以不改,自行选择

添加安装程序并修改配置

安装完成之后,源码中会出现一个ProjectInstaller程序集,双击进入页面修改相关属性

              

   

添加文件夹和实体类

LogHelper.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.IO;
 4 using System.Linq;
 5 using System.Reflection;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8
 9 namespace WindowsService.Common
10 {
11     public class LogHelper
12     {
13         /// <summary>
14         /// 获取程序异常信息
15         /// </summary>
16         /// <param name="methodBase"></param>
17         /// <param name="exception"></param>
18         /// <param name="message"></param>
19         /// <returns></returns>
20         public static string GetExceptionMessage(MethodBase methodBase, Exception exception, string message)
21         {
22             string fullName = methodBase.ReflectedType.FullName;
23             string name = methodBase.Name;
24             string str = $"\r\n异常综合信息(类:{fullName};函数名称:{name};):\r\n";
25             str += "-----------\r\n";
26             str += ".Net异常信息:\r\n";
27             if (exception == null)
28             {
29                 str += "   无异常对象,也无堆栈信息(exception == null)\r\n";
30             }
31             else
32             {
33                 str += $"   {exception.Message}\r\n";
34                 str += $".Net堆栈信息:\r\n{exception.StackTrace}\r\n";
35             }
36             str += "-----------\r\n";
37             if (message != null && message.Trim().Length > 0)
38             {
39                 str += "===========\r\n";
40                 str += $"自定义信息:\r\n   {message}\r\n";
41                 str += "===========\r\n";
42             }
43             return str;
44         }
45
46         /// <summary>
47         /// 写出日志信息 目录地址:string logPath = AppDomain.CurrentDomain.BaseDirectory + "00_Log\\";
48         /// </summary>
49         /// <param name="folderName"></param>
50         /// <param name="message"></param>
51         public static void Write(string folderName, string message)
52         {
53             string text = AppDomain.CurrentDomain.BaseDirectory + "00_Log\\";
54             if (folderName != null && folderName.Trim().Length > 0)
55             {
56                 text += folderName;
57             }
58             WritingLogs(text, message);
59         }
60
61         /// <summary>
62         ///  写出异常日志(.txt)
63         /// </summary>
64         /// <param name="strPath"></param>
65         /// <param name="strContent"></param>
66         public static void WritingLogs(string strPath, string strContent)
67         {
68             FileStream fileStream = null;
69             StreamWriter streamWriter = null;
70             try
71             {
72                 if (!Directory.Exists(strPath))
73                 {
74                     Directory.CreateDirectory(strPath);
75                 }
76                 strPath = string.Format("{0}\\{1}{2}", strPath, DateTime.Now.ToString("yyyy-MM-dd"), ".txt");
77                 fileStream = new FileStream(strPath, FileMode.OpenOrCreate, FileAccess.Write);
78                 streamWriter = new StreamWriter(fileStream);
79                 streamWriter.BaseStream.Seek(0L, SeekOrigin.End);
80                 streamWriter.WriteLine(strContent + "\r\n\r\n--------------------------------------------------------" + DateTime.Now.ToString() + "--------------------------------------------------------\r\n");
81                 streamWriter.Flush();
82                 streamWriter.Close();
83                 fileStream.Close();
84             }
85             finally
86             {
87                 streamWriter.Close();
88                 fileStream.Close();
89             }
90         }
91
92
93     }
94 }

LogHelper

Utility.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace WindowsService.Common
 8 {
 9     public class Utility
10     {
11         /// <summary>
12         /// 是否到时间进行执行
13         /// </summary>
14         /// <param name="hour">当前时间(小时)</param>
15         /// <returns>true:时间已到;false:时间未到;</returns>
16         public static bool TimeOut(string hour)
17         {
18             string times = "14|20|01";
19             if (times == null || times.Trim().Length <= 0)
20             {
21                 return false;
22             }
23             if (times.IndexOf(‘|‘) > 0)
24             {
25                 foreach (string t in times.Split(‘|‘))
26                 {
27                     if (t == hour)
28                     {
29                         return true;
30                     }
31                 }
32             }
33             else if (times == hour)
34             {
35                 return true;
36             }
37             return false;
38         }
39     }
40 }

Utility

TaskStart.cs

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Reflection;
 5 using System.ServiceProcess;
 6 using System.Text;
 7 using System.Threading;
 8 using System.Threading.Tasks;
 9 using WindowsService.Common;
10
11 namespace WindowsService.BusinessServices
12 {
13     public class TaskStart
14     {
15
16         /// <summary>
17         /// 业务开始运行
18         /// </summary>
19         public void TaskProcessing()
20         {
21             LogHelper.Write("Start", ".....服务正式运行.....");
22             Thread.Sleep(1000 * 20 * 1); //在20秒内进行附加进程
23             try
24             {
25                 bool isRun = false; //默认不执行
26                 while (true)
27                 {
28                     string hour = DateTime.Now.ToString("HH"); //获得当前的时间
29                     isRun = Utility.TimeOut(hour) ? true : false;
30                     if (isRun)//判断服务是否运行
31                     {
32                         #region 具体业务
33
34                         LogHelper.Write("具体业务", LogHelper.GetExceptionMessage(MethodBase.GetCurrentMethod(), null, Guid.NewGuid().ToString()));
35
36                         #endregion
37
38
39                         isRun = false; //已经操作一次
40                         Thread.Sleep(1000 * 60 * 62);   //休眠 62 分钟  //必须要超过 一个 小时
41                     }
42                     else
43                     {
44                         //睡眠两分钟
45                         Thread.Sleep(1000 * 60 * 2);  //停止设定时间,精确度比Sleep高
46                     }
47                 }
48             }
49             catch (Exception ce)
50             {
51                 LogHelper.Write("Operation", LogHelper.GetExceptionMessage(MethodBase.GetCurrentMethod(), ce, "\r\n\r\n.....服务异常.....\r\n\r\n"));
52
53                 ServiceController service = new ServiceController(new StartService().ServiceName);
54                 service.Stop(); //停止服务
55                 //service.Pause();//暂停服务
56                 //service.Start();//开始服务
57             }
58         }
59     }
60 }

TaskStart(具体业务)

修改启动服务代码

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Diagnostics;
 6 using System.Linq;
 7 using System.Reflection;
 8 using System.ServiceProcess;
 9 using System.Text;
10 using System.Threading;
11 using System.Threading.Tasks;
12 using WindowsService.BusinessServices;
13 using WindowsService.Common;
14
15 namespace WindowsService
16 {
17     public partial class StartService : ServiceBase
18     {
19         /// <summary>
20         /// 当前服务是否停止(默认时flase)
21         /// </summary>
22         private bool isStop = false;
23
24         /// <summary>
25         /// 启动服务
26         /// </summary>
27         public StartService()
28         {
29             InitializeComponent();
30
31             this.CanPauseAndContinue = true;
32             this.CanStop = true;
33             isStop = false;
34         }
35
36         ///<summary>
37         ///暂停服务
38         ///</summary>
39         protected override void OnPause()
40         {
41             LogHelper.Write("Operation", LogHelper.GetExceptionMessage(MethodBase.GetCurrentMethod(), null, "\r\n\r\n.....暂停服务.....\r\n\r\n"));
42             isStop = true;  //服务暂停
43         }
44
45         ///<summary>
46         ///恢复服务
47         ///</summary>
48         protected override void OnContinue()
49         {
50             LogHelper.Write("Operation", LogHelper.GetExceptionMessage(MethodBase.GetCurrentMethod(), null, "\r\n\r\n.....继续服务.....\r\n\r\n"));
51             isStop = false; //继续服务
52         }
53
54         /// <summary>
55         /// 服务停止
56         /// </summary>
57         protected override void OnStop()
58         {
59             LogHelper.Write("Operation", LogHelper.GetExceptionMessage(MethodBase.GetCurrentMethod(), null, "\r\n\r\n.....停止服务.....\r\n\r\n"));
60             isStop = true;  //服务停止
61         }
62
63         /// <summary>
64         /// 服务开始运行
65         /// </summary>
66         /// <param name="args"></param>
67         protected override void OnStart(string[] args)
68         {
69             try
70             {
71                 //当服务没有停止时,开始具体业务
72                 if (isStop == false)
73                 {
74                     Thread thread = new Thread(new ThreadStart(new TaskStart().TaskProcessing));
75                     thread.Start();
76                 }
77             }
78             catch (Exception ce)
79             {
80                 LogHelper.Write("Error", LogHelper.GetExceptionMessage(MethodBase.GetCurrentMethod(), ce, "\r\n\r\n.....停止服务.....\r\n\r\n"));
81             }
82         }
83     }
84 }

StartService

、服务安装

新建一个txt文本,输入以下内容,这里的WindowsService.exe 是程序路径,前面的路径是固定的,后面可变。修改txt文件名称为bat批处理文件,新建文本文档.txt——install.bat 。 然后右击 以管理员身份运行   这个批处理文件。这样服务就安装成功了。最后别忘记手动启动下这个服务。

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe  F:\DownLoad\WindowsService\WindowsService\WindowsService\bin\Debug\WindowsService.exe
pause

、服务卸载

和服务安装步骤一样,输入以下内容。然后 以管理员身份运行 即可。

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe /u F:\DownLoad\WindowsService\WindowsService\WindowsService\bin\Debug\WindowsService.exe
pause

四、调试

源码地址:https://github.com/RainFate/WindowsServiceDemo

原文地址:https://www.cnblogs.com/RainFate/p/11791820.html

时间: 2024-11-01 14:43:51

C# Windows服务创建安装卸载的相关文章

通过批处理进行Windows服务的安装/卸载&amp;启动/停止

安装服务 1 @echo off 2 3 set checked=2 4 set PATHS=%~sdp0 5 6 echo 按任意键执行安装--? 7 pause>nul 8 if %checked% EQU 2 ( 9 %PATHS%InstallUtil.exe %PATHS%WindowsService1.exe 2>&1 10 )else echo 未安装NET Framework 14 pause>nul 卸载服务 1 @echo off 2 3 set checke

.net windows 服务创建、安装、卸载和调试

原文:http://blog.csdn.net/angle860123/article/details/17375895 windows服务应用程序是一种长期运行在操作系统后台的程序,它对于服务器环境特别适合,它没有用户界面,不会产生任何可视输出,任何用户输出都回被写进windows事件日志.计算机启动时,服务会自动开始运行,他们不要用户一定登陆才运行. 可以通过选择菜单“开始”-〉“控制面板”-〉“管理工具”-〉“服务”来查看现有系统中的服务,如下图: 创建window 服务 新建一个wind

使用InstallUtil对Windows服务进行安装与卸载

关于Visual Studio 2012中使用InstallUtil对Windows服务进行安装与卸载的文章,在MSDN中的http://msdn.microsoft.com/en-us/library/sd8zc8ha.aspx 有介绍  : 点击左下角的开始按钮,按如下顺序“开始 - Visual Studio 2012 - Visual Studio Tools - Developer Command Prompt  for VS2012”,打开一个命令窗口 runas /user:Adm

(转)为C# Windows服务添加安装程序

本文转载自:http://kamiff.iteye.com/blog/507129 最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻塞系统,不用用户登录之类.哈 哈,扯远了,今天讲一下那个怎么给Windows服务做个安装包.为什么做安装包?当然是方便了,不用每次调用InstallUtil,还有,就是看上去 正规些. 不多说了,先来看看怎么做吧.首先,当然是创建一个Windows服务的项目.这个大家应该都知道怎么做(这都不明白的留

为C# Windows服务添加安装程序

最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻塞系统,不用用户登录之类.哈哈,扯远了,今天讲一下那个怎么给Windows服务做个安装包.为什么做安装包?当然是方便了,不用每次调用InstallUtil,还有,就是看上去正规些. 不多说了,先来看看怎么做吧.首先,当然是创建一个Windows服务的项目.这个大家应该都知道怎么做(这都不明白的留言问我),然后要给服务“添加安装程序”,如图1所示:(这一步和自己用InstallUti

windows服务创建

前段时间出去面试,技术太菜各种被狂虐,又问到windows服务相关之类的事情,现在睡不着,起来刚好粗略的研究了一把,话不多说. 解决方案: 1.打开VS,新建项目 -windows服务 创建完成后打开Services1.cs 2.右击界面,添加安装程序 这时候会发现多出如下几个文件 修改安装时账号 另外可以修改服务名称和服务启动方式 3.修改后编译一下,打开编译后的exe文件 编译完成后需要InstallUtil.exe 来安装服务,这时候打开framework默认安装位置,找到这个可执行文件

C# VS2010 windows服务的安装

可能是太过于懒惰的原因,研究个windows 服务的安装程序都花了大半天时间.在网上看了一些示例,大部分都言过其实,把过程搞得太过复杂,老是需要去研究如何利用InstallUtil.exe及其参数.事实上,既然要安装.net下制作的windows服务,肯定首先得在目标机器上安装有.net框架.因此,InstallUtil.exe也一定已经存在目标机器上了,因而利用微软的傻瓜式操作就能很好地解决windows服务安装和卸载的问题. 过一段时间估计还要狠狠地利用windows服务来完成一些功能,为了

windows服务部署与卸载

同事问到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,Servic

使用普通Windows服务创建Quartz.Net服务项目

使用普通Windows服务创建Quartz.Net服务项目 首先创建Quartz.Net.2.0解决方案,添加 Windows服务 项目,添加安装程序,修改服务运行账户类型为LocalSystem(默认为User) 添加C5.dll.Common.Logging.dll.Common.Logging.Log4Net.dll.log4net.dll.Quartz.dll引用 C5.dll 一个C#和其他CLI语言的泛型集合类..Net2.0及以上才可以使用.简介地址:http://www.itu.