.net Windows服务程序和安装程序制作图解(转)
默认分类 2010-05-24 16:55:05 阅读46 评论0 字号:大中小 订阅
IDE :WIN2003 VS2008 SQL2005
一、创建window服务项目
首先我们建一个window服务项目 :解决方案(右击)——> 增加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图:
![.net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客 .net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客](http://img233.ph.126.net/OT5XnBhpagYwz9C6Zs0sXw==/1364309212117981021.jpg)
二、编写Window服务程序
创建后会生成两个文件 Program.cs 和 Service1.cs ,其中 program.cs 这个文件不用动,里面已自动生成好了。我们在Service1.cs里增加所要的操作,里面有两个重写方法 OnStart 和 OnStop ,OnStart 方法表示服务启动的操作,OnStop 表示服务停止的操作,下面写了一个简单示例:当服务启动后,把字符串写入到一个文件中。code如下:
代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.IO;
using System.Threading;
namespace WS_CheckInterestCharge
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
StartHello();
}
protected override void OnStop()
{
try
{
ThreadHello.Abort();
System.Diagnostics.Trace.Write("线程停止");
}
catch (Exception ex)
{
System.Diagnostics.Trace.Write(ex.Message);
}
}
private Thread ThreadHello;
private void StartHello()
{
try
{
// 标准形式
//ThreadStart NewThreadStart = new ThreadStart(VoidName);
//Thread NewThead = new Thread(NewThreadStart);
//NewThead.Start();
ThreadHello = new Thread(new ThreadStart(Hello));
ThreadHello.Start();
System.Diagnostics.Trace.Write("线程任务开始");
}
catch (Exception ex)
{
System.Diagnostics.Trace.Write(ex.Message);
throw ex;
}
}
private void Hello()
{
try
{
writeInLog("aa", false); // 把调用返回的数据写入到文件中
}
catch (Exception ex)
{
System.Diagnostics.Trace.Write(ex.Message);
throw ex;
}
Thread.Sleep(5000);
}
private void writeInLog(string msg, bool IsAutoDelete)
{
try
{
string logFileName = @"E:/log.txt"; // 文件路径
FileInfo fileinfo = new FileInfo(logFileName);
if (IsAutoDelete)
{
if (fileinfo.Exists && fileinfo.Length >= 1024)
{
fileinfo.Delete();
}
}
using (FileStream fs = fileinfo.OpenWrite())
{
StreamWriter sw = new StreamWriter(fs);
sw.BaseStream.Seek(0, SeekOrigin.End);
sw.WriteLine("=====================================");
sw.Write("添加日期为:" + DateTime.Now.ToString() + "/r/n");
sw.Write("日志内容为:" + msg + "/r/n");
sw.WriteLine("=====================================");
sw.Flush();
sw.Close();
}
}
catch (Exception ex)
{
ex.ToString();
}
}
}
}
例子很简单,方便理解,上面通过线程,每5秒执行一次操作,到这里,我们的服务以及服务实现的功能就已经写好了,下面怎么让客户端安装我们的服务呢?这里才是我写这篇文章的目的!先要增加一个安装程序类,切换到视图窗口,右击——>增加安装程序,便会增加一个程序安装类文件 ProjectInstaller.cs,如图:
![.net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客 .net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客](http://img612.ph.126.net/PEOjjcPz_mH_KXrCIc9BwQ==/1700108859333895085.jpg)
这里serviceProcessInstaller1 和 serviceInstaller1 有几个重要属性要设置,serviceInstaller1 中的StartType要设置成Automatic,表示随机启动,ServiceName表示服务名称,Description 表示服务的描述, DisplayName 表示显示名称。serviceProcessInstaller1 中的Account要设置成LocalSystem,表示本地系统帐号
![.net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客 .net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客](http://img165.ph.126.net/wP4RrdQxWQRRX-v6HUGJFw==/2260525537965198893.jpg)
Window服务的安装有两个方式:
一、命令安装
![.net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客 .net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客](http://img1.ph.126.net/gJd1V2TDinkzcyDknDvYHw==/3182919036645879825.jpg)
![.net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客 .net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客](http://img837.ph.126.net/0qNu_8S5FIN-QO4eDvCwfg==/770397011258822255.jpg)
![.net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客 .net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客](http://img612.ph.126.net/zUhFbWzVir2lHlONVJ3WIg==/1976517286463936120.jpg)
由于我们是安装服务,就不需要用户桌面和程序菜单了,直接应用程序文件夹(右击)——> 增加 ——> 项目输出 入图 :
![.net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客 .net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客](http://img841.ph.126.net/70WDxMpgc1HTE3jefLI68Q==/1816076549739052697.jpg)
上面有两点需要注意 ,一 项目选择中选择要安装的服务, 二项目选择下面要选择主输出,选择好后确定,这一步增加了安装程序的文件夹,下一步就是给这个安装程序增加操作,这里我们增加两个基本操作,一个是安装,一个是卸载。安装项目(右击) ——> 视图 ——> 自定义操作 如图
![.net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客 .net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客](http://img841.ph.126.net/yyhCKEbLIPMtRRwd7-SHfg==/1814950649832171907.jpg)
上面可以看到有安装,提交,回滚,卸载等操作,我们先增加安装操作,安装(右击)——> 增加自定义操作,会弹出一个对话 如图:
![.net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客 .net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客](http://img848.ph.126.net/x72Zcv5IQAo_7NQ5F6RBtw==/2092484976869035746.jpg)
选择应用程序文件夹,并选中之前增加的主输出项,确定,这样这个安装程序就增加了安装的操作,同样按照这样的方式增加卸载操作,卸载与安装唯一不同的是需要设置一个命令参数,不可少,如图:
![.net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客 .net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客](http://img847.ph.126.net/KcYf1iMeHDtjfSSp1ZFZnw==/762797186887844218.jpg)
这里 Arguments 里输入 /u 表示卸载命令相当于 InstallUtil.exe /u 服务路径 , 到这里 ,我们的安装程序就已经制作好了,生成安装程序项目,将会生成 setup.exe 和 setup.msi 安装文件,拷贝到客户端,点击setup.exe 就像安装QQ一样安装我们的服务,实际上比QQ好多了,QQ还有广告,我们可是纯绿色的!
![.net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客 .net Windows服务程序和安装程序制作图解(转) - xing_ao - xing_ao的博客](http://img837.ph.126.net/PAjW-6p0k9BlhtHVUtFM3A==/1773292353278984132.jpg)
{
ServiceController sc = new ServiceController(serviceInstaller1.ServiceName);
sc.Start();
}