使用C#创建一个简单的Windows服务 与安装向导 【转】

服务功能:在C:\ServiceLog.log中记录服务的开始和停止时间,在指定间隔时间重复执行一些操作,并在C:\ServiceLog.log中记录时间。
步骤1:打开Microsoft Visual Studio 2008,新建一个Windows服务;

步骤2:打开Service1.cs代码页,输入下边代码;

Service1.cs:
复制内容到剪贴板程序代码 程序代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.IO;
namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 启动服务
        /// </summary>
        /// <param name="args"></param>
        protected override void OnStart(string[] args)
        {
            if (!File.Exists(@"C:\ServiceLog.log"))
            {
                File.Create(@"C:\ServiceLog.log");
            }
            
            File.AppendAllText(@"C:\ServiceLog.log",string.Format("启动时间:{0}\r\n", DateTime.Now.ToString()));
            //设置一个定时器
            System.Timers.Timer timer1 = new System.Timers.Timer();
            timer1.Interval = 3000;//间隔时间
            timer1.Elapsed += new System.Timers.ElapsedEventHandler(Done);//达到间隔时间执行的处理程序
            timer1.AutoReset = true;//每次间隔结束时引发 System.Timers.Timer.Elapsed 事件,如果仅在第一次引发设置为false
            timer1.Enabled = true;
        }
        /// <summary>
        /// 停止服务
        /// </summary>
        protected override void OnStop()
        {
            File.AppendAllText(@"C:\ServiceLog.log",string.Format("停止时间:{0}\r\n", DateTime.Now.ToString()));
        }
        /// <summary>
        /// 定时任务
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Done(object sender, EventArgs e)
        {
            //这边可以做些其他操作
            File.AppendAllText(@"C:\ServiceLog.log", string.Format("执行定时任务:{0}\r\n", DateTime.Now.ToString()));
        }
    }
}
步骤3:在Service1.cs设计视图上点击右键,选择"添加安装程序",会添加一个新类 ProjectInstaller 和两个安装组件 ServiceProcessInstaller 和 ServiceInstaller;

步骤4:打开ProjectInstaller.cs设计视图,设置serviceInstaller1组件的ServiceName属性值(服务名称)和StartType属性值(服务启动类型,通常设置为Automatic),设置serviceProcessInstaller1组件的Account属性值(运行服务的帐户类型,通常设置为LocalSystem),三个属性设置完后本服务创建完成;

 

下面,就是今天讲的重点了,点击“文件”->“添加”->“新建项目”(如图5)

(图5)

选择“其他项目类型”->“安装和部署”里的“安装项目”(如图6)

(图6)

建好项目后,右键刚才新建的安装项目,选择“视图”->“文件系统”(如图7)

(图7)

这时,打开了文件系统属性。可以看到,屏幕左边,出现了三项文件系统的内容,因为我们是Windows服务程序,不需要在开始菜单和桌面上放置图标,所以我们直接右键“应用程序文件夹”->“添加”->“项目输出”(如图8)

(图8)

在出来的对话框中,选择“主输出”和“Release XXX”,这个由你的项目属性决定,一般选择Release Any CPU。(如图9)

(图9)

系统会自动把项目输出文件,也就是Windows服务程序的EXE文件和所有引用的类库文件都列在中间的框中。这时,为了方便安装,我们把InstallUtil.exe和两个我自己写的批处理文件一起添加进去。添加方法类似上面,只是把“项目输出”改成“文件”。
结果如图10所示:

(图10)

接下来,就该配置一下安装过程,让安装程序自动给我们安装和卸载Windows服务。

还是右键安装项目,选“视图”->“自定义操作”,如图11:

(图11)

左边的窗口换到了自定义操作的视图了,右键“安装”->“添加自定义操作”(图12),出现的对话框中,选中“应用程序文件夹”,再选中其中的InstallUtil.exe文件(图13),添加好后,会在安装操作下面多出一个InstallUtil.exe的分支。点一下它,在右边的属性页里,设置Arguments=“ 你的Windows服务文件名”,如图14(注意文件名前要留一个空格)

(图12)


(图13)


(图14)

同样,在提交和卸载处,也添加InstallUtil.exe,不过属性页中设置Arguments=“ -u 你的Windows服务文件名”,这样,安装程序就能实现自动安装注册和卸载Windows服务了。(如图15)

(图15)

接下来就该让Windows服务和安装项目同时被编译了。右键点击解决方案,选择“属性”(如图16),在出来的对话框中,勾上安装项目后面的生成。(如图17)

(图16)


(图17)

最后,右键解决方案,选择“生成解决方案”,这时vs会将两个项目都会编译出来。不过要注意一点:项目的启动顺序一定要Windows服务项目在前,安装项目在后。

posted @ 2013-05-07 19:31  FH1004322  阅读(982)  评论(0)    收藏  举报