.net/vs2005/c# 创建windows service/windows服务

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

先来说概念,所谓windows service,就是一个可以持续在后台运行的没有GUI界面的windows form程序.如果这样理解,那接下来的编程就容易多了.
但是和winform不同的是,windows service有自己独特的东西,那就是可以手动进行"开始","暂停"等操作.
一个可以使用windows service要包括windows service主程序和它的安装程序.虽然我们说windows service是一个隐藏的winform,但它没有办法自己完成安装,所以需要有额外的安装程序辅助.
本文将分两步介绍:程序的开发,程序的安装.

1.windows service的开发

使用vs新建一个project,在windwos类别中选择windows service,选好路径,创建.这将自动为你创建一个继承自ServiceBase的类.通过在类名上右键选"view code"进入到这个类的代码页.
而实际上,如果你创建了一个类库的project,然后创建一个新类,并让这个类继承System.ServiceProcess.ServiceBase,那也算是创建了一个windows service.所以,实际上,用c#写一个windows service,实际上就是要写一个继承自ServiceBase的类.
接下来,你要编码实现你想要的操作.比如跟踪系统中某个文件的变化.
我们还是要拿winform来说明,一般一个程序写完后,点击exe文件,它就会运行,那么要怎么样让windows service运行?稍微对计算机系统熟悉的人都知道,要去控制面板的"服务"窗口对服务进行管理.比如要让你的服务开始运行,就点击"开始服务".很明显这是一个事件.ServiceBase类提供了对这类事件的支持,他们分别是
OnStart/OnStop/OnPause/OnContinue
可以直接从字面意思来理解这些事件.
要让你写的跟踪程序开始运行,就在下面的事件中写些代码
protected override void OnStart(string[] args)
        {
            // TODO: Add code here to start your service.
        }
一般来说,为了满足"开始停止"这样的操作,我们的windows service类中会有一个标志符来控制程序流.比如当start的时候,isRun=true,但是如果用户选择停止这个服务,那isRun=false.
还必须的一个东西,是给ServiceName赋值,这是ServiceBase的一个属性,用来指定服务的名称.
如此这般,完成你的winfows service类.


按照文章一开始说的,windows service没有办法双击就运行.它需要一个安装类来辅助.接下来我们要做的,就是给这个服务添加一个安装辅助类.
在project名上右键,添加新项目,选择installer class.vs会自动给我们创建一个安装类.
实际上,你也可以添加一个新类,然后让这个类继承自System.Configuration.Install.Installer.所以,实际上,用c#写一个安装类,实际上就是要写一个继承自Installer的类.
说到这里打断一下,虽然你可以自己创建windows service类和install类,但是还是建议让vs来给你创建,因为这样除了有清晰的层次关系,还会得到很多自动生成的代码段.比如说重写的Dispose方法.
安装windows service类,首先需要一个service安装进程,然后在进程中有service的安装,所以,我们需要在这个安装类中创建这两个类.
this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
你可以这样想:ServiceInstaller负责安装windows service,而ServiceProcessInstaller是包裹在外面的一层.
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
this.serviceProcessInstaller1.Password = null;
this.serviceProcessInstaller1.Username = null;
这个来设置安装时的权限,一般选择本地系统账户的,话,就不需要用户名和密码了
this.serviceInstaller1.ServiceName = "notus";
this.serviceInstaller1.Description = "a sample";

serviceInstaller1.StartType = ServiceStartMode.Automatic;
而ServiceInstaller设定的都是和服务本身相关的一些参数,比如启动方式,名字,描述等.
这里的ServiceName要和前面你写的windows service的名字相同.否则会出麻烦.
如果你想在安装的前后做点什么,那就需要进入到事件的操作.ServiceInstaller提供了安装时的一些事件供你使用,比如下面这个:
serviceInstaller1.BeforeUninstall += new System.Configuration.Install.InstallEventHandler(serviceInstaller1_BeforeUninstall);
我们可以给这个事件加个代码,就是确保你在删除服务的时候,该服务是停止的.(如果服务正在运行,而你要删除它,那就会出问题)
 void serviceInstaller1_BeforeUninstall(object sender, System.Configuration.Install.InstallEventArgs e)
        {
            ServiceController con = new ServiceController(serviceInstaller1.ServiceName);
            if (con.Status == ServiceControllerStatus.Running || con.Status == ServiceControllerStatus.StartPending)
            {
                    con.Stop();
            }
        }
还有一点要注意的是,如果要使用那些环境变量,需要按照下面的方法取得:
this.serviceProcessInstaller1.Context.Parameters["SURL"];
这个安装类麻烦了些,因为出现了三个带install的类,最后应该类似于这个样子:
 [RunInstaller(true)]

 public partial class ProjectInstaller : Installer

{
 this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
 this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
 //......
}
如此这般,完成你的安装类.

这样,工作就基本完成了.如果你是用vs自动添加的这两个类,可能会有些小迷惑,因为点击view code,和到里面在点击,会有很多个名字一样的类出现,然后有的继承了基类,有的没有继承,有的又引用什么的...其实安静下来看,这几个类都是partial的,也就是局部类.不要被vs弄晕.


2.widnows service的安装

vs命令提示符

一种是在vs命令提示符下(注意不是cmd敲出来的那个,而是在开始菜单的vs安装目录下那个)用命令操作
使用这个安装 installutil myservice1.exe
这样删除 installutil /u myservice1.exe
当然,在运行前,你得先定位到myservice1.exe所在的文件夹.

windows安装项目

也可以使用vs提供的制作安装程序的功能,把你的project添加到主输出,就可以安装.
新建peject,在其他那一类中选择setup project,vs会给你创建一个安装项目.
在项目名上右键,add,peojet output(输出),把你的服务project添加进来.然后再在项目名上右键,view,custom action,你会看到有四个类别,分别是install,commit,rollback,uninstall,在上面右键,add custom action,然后在application folder中找到你的服务project,添加进来.
如此这般(...),完成.
编译,运行,看看效果 :)如果不出意外,你的服务就可以在控制面板的"服务"窗口中找到.

 

 

 

 

如何创建、发布Web ServiceC#WINFORM里如何调用WEB Service API 一、创建和发布Web Service        Web服务方法中可以返回一个DataSet对象        WEB服务可以说是下一代WEB应用程序的基础,无论客户端是WINDOWS应用、ASP.NET Web Form程序、甚至其他语言的客户端,都可以与同一个WEB服务通信,其平台和语言无关性使其有了广阔的发展空间。利用VS2005和IIS我们可以很容易地发布一个WEB SERVICE 阅读详情

相关推荐

C#项目使用Setup Project打包详细步骤

C#项目使用Setup Project打包详细步骤

asd157398的博客 1927

如何在.NET 自动安装包项目(Visual Studio Installer Projects)中设置安装包自动安装 .NET Framework环境

​是一组用于创建安装程序的工具,它是Microsoft Visual Studio的扩展。这些工具允许开发人员在Visual Studio中创建和定制安装程序,以便将他们的应用程序打包并分发给用户。​ 使用Visual Studio Installer Projects,开发人员可以通过可视化界面来配置安装程序的各种设置,并且可以使用自定义脚本和自定义操作来满足特定的安装需求。该工具集成在Visual Studio开发环境中,使开发人员能够在同一环境中进行应用程序的开发和安装程序的创建

guigenyi的专栏 6124

VS】在Setup Project设置最低.NET FrameWork版本

问题: 在低版本的.NET FrameWork版本的电脑中,安装软件出现下面提示 分析: 安装软件的电脑的.NET FrameWork版本是4.6.1 而我项目版本设置的是4.5.2,为什么出现这个提示呢? 于是,开始怀疑是Setup Project安装程序的问题, 但在Setup Project程序里找不到什么属性,于是我用记事本打开Setup.vdproj文件。 发现里面存着...

GreAmbWang的博客 2302

使用VisualStudio2022插件(Visual Studio Installer Projects 2022)打包 .Net 6/.Net 8 框架下的 WPF项目 为 msi安装文件

使用VisualStudio2022插件(Visual Studio Installer Projects 2022)打包 .Net 6/.Net 8 框架下的 WPF项目为msi安装文件

syzcyyx的博客 1万+

C#创建Windows Service

C#创建Windows Service   现在的。NET框架已经为Windows service的开发提供足够强大的支持,你只需要关注service所要实现的逻辑,而完全不用关心service底层是如何实现的,相比以前用MFC来说,真是质的飞跃啊。闲话少谈,看看如何实现一个最基本的windows service,以及如何来调试windows service.  打开VS 2005,点击Fi

thy822的专栏 765

c#创建windows service示例 .

原文转自:http://dreambuild.blog.sohu.com/132659489.html 有关windows service的详细介绍,不在本文叙述。如果想了解,自己到网上去搜一搜,关键词就是“windows service”,搜索结果保证不会让你失望,呵呵!本文的预期读者即为对windows service有一定了解,但又没有编写过windows service程序的人。 首先

aijingyi的专栏 811

c#创建windows service示例以及在asp.net中如何控制windows service

有关windows service的详细介绍,不在本文叙述。如果想了解,自己到网上去搜一搜,关键词就是“windows service”,搜索结果保证不会让你失望,呵呵!本文的预期读者即为对windows service有一定了解,但又没有编写过windows service程序的人。首先咱不急于介绍如何如何编码,第一步干吗第二步干吗。在你需要动手之前,你要想清楚,我为什么要这么做,有没有其它更方

水煮鱼的博客 6093

创建Windows Service

现在的.NET框架已经为Windows service的开发提供足够强大的支持,你只需要关注service所要实现的逻辑,而完全不用关心service底层是如何实现的,相比以前用MFC来说,真是质的飞跃啊。闲话少谈,看看如何实现一个最基本的windows service,以及如何来调试windows service。      打开VS 2005,点击File->New->Project….,在创

想念菲菲 836

VS2005 如何创建和发布.asmx Web Service

创建和发布Web Service Web服务方法中可以返回一个DataSet对象   WEB服务可以说是下一代WEB应用程序的基础,无论客户端是WINDOWS应用、ASP.NET Web Form程序、甚至其他语言的客户端,都可以与同一个WEB服务通信,其平台和语言无关性使其有了广阔的发展空间。 利用VS2005和IIS我们可以很容易地发布一个WEB SERVICE

紫冰寒寞的专栏 1750

c#开发Windows服务程序指南

转载:http://sunday.blog.51cto.com/360410/94315 本文将较为详细的介绍如何在.net下开发Windows服务程序,并将简要介绍一些开发中的调试技巧及后期的部署问题.   IDE:VS2005, DotNetFramework Version:2.0.50727   Windows服务程序通常是一种在OS的后台长期运行的程序,根据需要你可以设置为随服务...

weixin_33950035的博客 379

一个移动文件的Windows服务的制作(主篇)

序: 最近由于需要一个转移文件的程序,当时想到的有几种做法:1、用批处理文件;2、写一个控制台程序,然后使用用户计划定期进行调用;3、写一个windows服务,然后自己存在一个Timer控件进行调用。第一种方式我不是很熟悉命令,所以处理程序也不强(比如:判断转移目标路径所在盘符是否有足够的空间等,如果空间不足那么就不进行转移)第二种方式实际从代码主题上和第三种方式基本一

vividboy的专栏 3529
上一篇: 根据两点经纬度计算距离
下一篇: Visual Studio 2005 创建Windows服务程序(C#)
matriculate
博客等级 码龄18年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值