windows service (服务)创建流程
一、概念
二、创建流程
1、添加模板、配置服务
2、写服务代码
3、安装与卸载、调试
一、概念
window service,使用 Microsoft Visual Studio 或 Microsoft .NET Framework SDK,可以通过创建以服务方式安装的应用程序来轻松创建服务。 这种类型的应用程序称为 Windows 服务。 使用框架功能,可以创建服务,安装服务和启动、停止服务以及用其他方式控制服务的行为。
主要有三个类:
ServiceBase
描述 ServiceBase 类的主要功能,该类用于创建服务。
ServiceProcessInstaller
描述 ServiceProcessInstaller 类的功能,该类与 ServiceInstaller 类一起用来安装和卸载您的服务。
ServiceInstaller
描述 ServiceInstaller 类的功能,该类与 ServiceProcessInstaller 类一起用来安装和卸载您的服务。
二、创建流程
1、添加模板、配置服务
在“文件”菜单上,单击“新建项目”,
将打开“新建项目”对话框。
Visual C# 项目模板的列表中选择“Windows 服务”,并将项目命名为 WSDemo。 单击“确定”
刚创建,你可以点击项目属性看到,默认target framework,可能是.NET framework4 client profile,然后项目也没用出现app.config。这时候可以选择为.NET framework 4,就会出现app.config,而且之后添加其它项目,才不会因为是client profile 的版本简化而无法编译通过。
为服务创建安装程序、及配置
在Service1视图设计器中,右键单击“添加安装程序”,
默认情况下,向您的项目添加一个包含两个安装程序的组件类。 将该组件命名为 ProjectInstaller,它包含的安装程序分别是服务的安装程序和服务关联进程的安装程序。
在 ProjectInstaller单击 ServiceInstaller1 ,在“属性”窗口中,确保 ServiceName 属性已设置为 自己的“Service1”。
在设计器中单击 ServiceProcessInstaller1 , 将 Account 属性设置为 LocalSystem。 这将使得在本地服务帐户上安装和运行该服务。
2、写服务代码
这样windows 简单服务就配置好了。然后写一个简单示例。
private bool autoCML = false; private Timer smsTimer; private Log4NetLogService loger = new Log4NetLogService(); static readonly object padlock = new object(); public Service1() { InitializeComponent(); log4net.Config.XmlConfigurator.Configure(); } protected override void OnStart(string[] args) { loger.LogInfo("启动处理操作服务"); smsTimer = new Timer(); int interval = 5000; if (!int.TryParse(ConfigurationManager.AppSettings["SendSMSInterval"], out interval)) { interval = 6000; } smsTimer.Interval = interval; smsTimer.Enabled = true; smsTimer.Elapsed += new ElapsedEventHandler(smsTimer_Elapsed); smsTimer.Start(); } private void smsTimer_Elapsed(object sender, ElapsedEventArgs e) { lock (padlock) { loger.LogInfo("处理操作开始"); try { AutoUpdateCml(); } catch (Exception ex) { loger.LogException("处理操作信息错误", ex); } loger.LogInfo("处理操作结束"); } } void AutoUpdateCml() { string Jobtime = ConfigurationManager.AppSettings["autoUpdateCmlAtTime"].ToString(); //每天00点,更新一次XX基本信息 if (DateTime.Now.ToString("HH") == Jobtime) { if (!autoCML) { //YOU JOB autoCML = true; } else { autoCML = false; } } } protected override void OnStop() { smsTimer.Stop(); loger.LogInfo("自动操作结束"); }
上面的创建方式是用vs自动模板创建的,当然可以自己通过“System.ServiceProcess.dll"的servicebase类来编写服务。
http://msdn.microsoft.com/zh-cn/library/vstudio/76477d2t.aspx
3、安装与卸载、调试
代码写完后,编译通过后,就可以安装、卸载、调试服务了。
安装、卸载很简单,只要在VS命令行导航到,服务程序的路径。然后运行以下命令就OK了。
CD C:\Users\voro\Documents\Visual Studio 2010\Projects\WSDemo\WSDemo\bin\Debug
安装服务:"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" Service1.exe
net start "Service1"
卸载服务:net stop "Service1"
"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe" /u Service1.exe
调试的话,只能先安装启动服务,然后将该服务附加到进程,就可以调试了。安装好服务后,就可以在win7服务管理里面,管理刚刚启动的服务了。