C#开发Windows服务

Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序。

服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。

服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。

还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务

一、创建服务

1、VS新建一个Windows服务项目,命名MyWindowsService

2、修改Service1为MyService,F7进入代码页面(点击切换代码视图),编写操作逻辑代码

3、OnStart用于执行服务事件,一般采用线程方式执行方法,便于隔一段事件执行一回

using System;
using System.IO;
using System.ServiceProcess;
using System.Threading.Tasks;

namespace MyWindowsService
{
    public partial class MyService : ServiceBase
    {
        public MyService()
        {
            InitializeComponent();
        }
        //服务开启
        protected override void OnStart(string[] args)
        {
            Task.Factory.StartNew(Handle);
        }
        //服务关闭
        protected override void OnStop()
        {

        }

        //需要定时执行的代码段
        private void Handle()
        {
            while (true)
            {
                try
                {
                    var path = AppDomain.CurrentDomain.BaseDirectory + "service.log";
                    var context = "MyWindowsService: Service Stoped " + DateTime.Now + "\n";
                    WriteLogs(path, context);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

        public void WriteLogs(string path, string context)
        {
            var fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
            var sw = new StreamWriter(fs);
            sw.BaseStream.Seek(0, SeekOrigin.End);
            sw.WriteLine(context);

            sw.Flush();
            sw.Close();
            fs.Close();
        }
    }
}

服务不能直接运行,F5会出现

二、创建服务安装程序

1、选中MyService.cs,右键-->查看设计器 ;在设计器中右键-->添加安装程序

2、项目中添加了ProjectInstaller.cs文件,该文件中视图自动会添加俩个组件serviceProcessInstaller1和serviceInstaller1

3、选中serviceProcessInstaller1组件,查看属性,设置account为LocalSystem,这样能保证无论是什么用户登录都能执行。

4、选中serviceInstaller1组件,查看属性设置如下

ServiceName:表示在系统服务中的名称

StartType:Manual:手动启动,默认停止,Automatic:自动启动

Description:服务描述

三、安装、卸载服务

安装服务需要InstallUtil.exe,一般在电脑这个目录找到C:\Windows\Microsoft.NET\Framework64\v4.0.30319

此处需要注意的是,在C:\Windows\Microsoft.NET\Framework目录下有很多类似版本,具体去哪个目录要看项目的运行环境,例 如果是.net framework2.0则需要输入 cd C:\Windows\Microsoft.NET\Framework\v2.0.50727

1、重新生成MyWindowsService项目

2、生成的bin目录考到要安装的目录(服务文件已经在附件中):例如:拷贝到C:\(服务路径根据实际情况安装,卸载)

3、窗口+R 打开cmd

cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319

安装服务: Installutil C:\bin\Debug\MyWindowsService.exe

卸载服务: Installutil /u C:\bin\Debug\MyWindowsService.exe

4、我的电脑-->右键管理-->服务和应用程序-->服务  找到我们的服务

启动服务后会一直执行Handle()方法写日志

四、调试服务

首先确保服务已经安装成功,并且处于已启动

VS-->调试-->附加到进程 找到我们服务名称MyWindowsService确定

然后断点就进代码了

如果出现MyWindowsService.exe无法复制或者进程占用的问题

打开进程管理器,关闭MyWindowsService.exe进程就可以了。

时间: 2024-08-07 16:44:58

C#开发Windows服务的相关文章

C# 开发 Windows 服务 使用Log4net 组件 不能生成日志文件

使用VS2012开发Windows服务,需要使用Log4net日志组件记录业务情况,但是始终生成不了日志文件. 1 /// <summary> 2 /// 入口方法 3 /// </summary> 4 /// <param name="args">参数</param> 5 public static void Main(string[] args) 6 { 7 // 加载Log4net模块 8 LogHelper.SetConfig(&

.net开发windows服务小结 (转发)

.net开发windows服务小结 今天学习了在.net下创建一个windows服务,总结一下学习心得. 开发环境:visual studio 2012 一.编写程序 (1)创建一个空解决方法 (2)添加一个控制台应用程序项目 (3)添加一个Windows服务,如下所示: (4)右键 查看代码 看到如下代码: public WindowsService() { InitializeComponent(); } protected override void OnStart(string[] ar

win7下用c#开发windows服务

1.首选我们需要打开VS2008,然后点击文件-->新建-->项目,选择Visual C#-->windows-->windows服务.如下图所示: 2.然后修改Service1.cs类. 我们需要重写OnStart和OnStop方法.代码如下所示: [csharp] view plaincopy using System; using System.Collections.Generic; using System.ComponentModel; using System.Dat

使用Topshelf 开发windows服务

在业务系统中,我们为了调度一些自动执行的任务或从队列中消费一些消息,所以基本上都会涉及到后台服务的开发.如果用windows service开发,非常不爽的一件事就是:调试相对麻烦,而且你还需要了解 windows service 相关的一些开发和安装部署,所以,windows service非常的不方便.Topshelf框架,能够让你将 console application 直接封装为 windows service,这样你在开发的时候,就可以直接在console 程序上开发,然后构成win

vs2015开发Windows服务

工作已经很久,时隔这么长时间写这篇文章是给自己以后做参考.也不至于以后长时间不写Windows服务而忘记整个开发过程.windows服务开发,基础的就不说了,直接上过程. 1.新建windows服务项目,我这里选择的是Framework4.0,没有选择高版本是为了防止在服务在一些低版本系统上无法正常运行. 2.添加Windows服务的安装程序. 在默认Service1设计器界面空白处点击右键->添加安装程序,系统会自动新建一个带有默认配置的安装程序类,如下图: 新建完安装程序后,需要给默认的se

.net开发windows服务小结

今天学习了在.net下创建一个windows服务,总结一下学习心得. 开发环境:visual studio 2012 一.编写程序 (1)创建一个空解决方法 (2)添加一个控制台应用程序项目 (3)添加一个Windows服务,如下所示: (4)右键 查看代码 看到如下代码: public WindowsService() { InitializeComponent(); } protected override void OnStart(string[] args) { } protected

C# 开发windows服务的一些心得

最近在做一个windows服务的项目,发现并解决了一些问题,拿出来和大家分享一下,以下windows服务简称“服务” 1.服务如何在某种情况下弹出一个窗体? 第一种解决办法,用安装程序的代码修改注册表来完成: 1.右击服务的视图设计界面的空白处,添加安装程序 2.右击默认的serviceProcessInstaller1-->属性-->Account属性设置为LocalSystem 3.右击安装程序空白处-->查看代码,添加以下代码 public override void Instal

C#实现开发windows服务实现自动从FTP服务器下载文件(自行设置分/时执行)

最近在做一个每天定点从FTP自动下载节目.xml并更新到数据库的功能.首先想到用 FileSystemWatcher来监控下载到某个目录中的文件是否发生改变,如果改变就执行相应的操作,然后用timer来设置隔多长时间来下载.后来又想想了.用windwos服务来实现吧. 效果图: 执行的Log日志: INFO-2016/5/24 0:30:07--日志内容为:0/30/7进行time触发 INFO-2016/5/24 1:30:07--日志内容为:1/30/7进行time触发 INFO-2016/

C#开发可以可视化操作的windows服务

使用C#开发自定义windows服务是一件十分简单的事.那么什么时候,我们需要自己开发windows服务呢,就是当我们需要计算机定期或者一直执行我们开发的某些程序的时候.这里我以一个WCF的监听服务为例,因为我是做一个局域聊天室,需要服务器端监听终端,所以我就开发了一个服务,以便控制此监听服务.然而,我们开发的windows服务,默认情况下是无法可视化的操作的,这里我就额外的开发一个工具来对此服务进行操作,效果图如下: 开发步骤: 1."新建项目"--"Window服务&qu