c语言创建文件夹 c语言 c#创建服务

导读:爱华网网友为您分享以下“c#创建服务”资讯,希望对您有所帮助,感谢您对aIhUaU.com的支持!

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

先来说概念,所谓windows service,就是一个可以持续在后台运行的没有GUI界面的windows form程序.如果这样理解,那接下来的编程就容易多了.

但是和winform不同的是,windows service有自己独特的东西,那就是可以手动进行"开始","暂停"等操作.

一个可以使用windows service要包括windows service主程序和它的安装程序.虽然我们说windows service是一个隐藏的winform,但它没有办法自己完成安装,所以需要有额外的安装程序辅助.

c语言创建文件夹 c语言 c#创建服务

本文将分两步介绍:程序的开发,程序的安装.

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,添加进来.

如此这般(...),完成.

编译,运行,看看效果 :)如果不出意外,你的服务就可以在控制面板的"服务"窗口中找到.


百度搜索“爱华网”,专业资料,生活学习,尽在爱华网  

爱华网本文地址 » http://www.aihuau.com/a/410751/441894247278.html

更多阅读

娱乐营销 娱乐营销之银幕争霸

最近,清华同方赞助央视MTV音乐盛典、方正借《十面埋伏》搞暑促、创维选女子十二乐坊代言,一连串的知名企业结缘娱乐,娱乐营销正在成为与体育营销、感动营销相当的新营销兵法之一。然而,娱乐营销有多大威力?什么是有竞争力的品牌企业决胜

精彩的外貌描写 描写人外貌的精彩句子

  树丛被拨开了,一个小孩的脑袋钻了进来,这是个男孩子,大约有十二、三岁,又黑又瘦的小脸上,满是灰尘,头发约有二寸多长,乱蓬蓬的,活像个喜鹊窝。  他黑虎头似的脸上,生着一对铜铃一般的大眼睛,十分精神。  他机灵、淘气而又幼稚,胖乎乎

立夏节气 芒种节气

   是二十四节气中的第九个节气。 每年在6月6日或7日前后太阳到达黄经75°时开始。芒种是反映物候的节令。“芒”就是指一些有芒作物,如大麦、小麦开始成熟,将要收割,“种”就是种子的意思,或表明晚谷、黍、稷等作物播种最忙的

宿便的危害 宿便毒素带来的危害

   1、毒素使人生病  长年累月,脏器在毒素的侵袭下承受着巨大的压力,脏器的功能就会开始失调,运作变得不顺畅。当毒素累积至身体无法负荷时,病菌和病毒接连不但对他们发起攻击,于是疾病开始了!医学研究发现,人体所患的过敏、机

声明:《c语言创建文件夹 c语言 c#创建服务》为网友零落她的影子分享!如侵犯到您的合法权益请联系我们删除