C# 开发windows 服务

系统 1885 0
一、Windows Service 服务,可以在用户未登录的时候开始运行提供服务(下图)

C# 开发windows 服务

二、开始建立一个Windows 服务

1.打开VS2008 新建一个Windows 服务项目

C# 开发windows 服务

系统会默认的建立一个

Program.cs 是启动文件,里面有如下代码用来启动服务
    
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new Service1() 
            };
            ServiceBase.Run(ServicesToRun);
        }

  



2.Service1.cs 服务类。继承自System.ServiceProcess.ServiceBase

右键点击此文件,点击“查看代码”,打开类代码视图可以找到几个重载方法

C# 开发windows 服务

OnStart方法来响应启动服务的事件

OnStop方法来响应停止服务的事件

OnPause方法来响应暂停服务的事件

OnContinue方法来响应恢复提供服务的事件

在重载这些方法时必须要立即返回,其中不能出现长时间的操作,若处理时间过长则Windows服务管理器会觉得该Windows服务停止响应而报错。

3.在“设计器视图”右键,会看到一个添加“添加安装程序”,添加一个ProjectInstaller.cs

C# 开发windows 服务

ProjectInstaller.cs  安装服务,继承自System.Configuration.Install.Installer,该类用于配合微软.NET框架自带的安装命令行工具InstallUtil.exe

将此文件的serviceProcessInstaller1->Accout属性,设为:LocalSystem(默认是User)。


4.现在要实现点小功能来学习一下Windows 服务,

功能是简单实现:每隔5秒向SQL数据库插入一条数据,然后将SQL语句记录到指定的TXT文件中做日志,

可以将写好的功能组件引用进来使用,如果没有可以简单的新建类库项目,打开默认的Class1.cs文件,写以下几句代码


    
namespace ClassLibrary1
{
    public class Class1
    {
        public static void Test()
        {
            LogService ls = new LogService();
            ls.InitLog("WindowsService", "d:\\log\\");
            ls.WriteLog(" -------------------------------" + DateTime.Now.ToString() + "------------------------------------------");
            try
            {
                using (SqlConnection cn = new SqlConnection("Data Source=192.168.1.20;Initial Catalog=TestWindowsService;User ID=sa;Password=saaaaa"))
                {
                    cn.Open();
                    using (SqlCommand cm = cn.CreateCommand())
                    {
                        cm.CommandType = CommandType.Text;
                        cm.CommandText = "INSERT INTO T_Test (InsertTime) VALUES (@insertTime)";
                        cm.Parameters.AddWithValue("@insertTime", DateTime.Now.ToString());
                        cm.ExecuteNonQuery();
                        ls.WriteLog("操作成功!SQL语句:" + cm.CommandText);
                    }
                }
            }
            catch (Exception ex)
            {
                ls.WriteLog("操作失败:" + ex);
            }
        }
    }
}

  



将类库项目引用到服务项目中来,添加一个System.Timers下的Timer控件,在Elapsed事件中就可以直接调用

5.手动安装:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe  FilePath\xx.exe

这个FilePath,就是程序文件夹中Debug目录先的  项目名.exe  文件 ,我一直是默认建的,所以这里是WindowsService1.exe

C# 开发windows 服务

安装成功,会在本文的第一个图片位置找到服务名为Service1的服务选项,手动的启动它一下,可以在D:\log下看到日志


6.卸载:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe -u FilePath\xx.exe

C# 开发windows 服务

卸载后页面中没有了图片中的服务

7.最后:

可以为Windows 服务添加客户端,也可以在启动程序中编写不使用 InstallUtil.exe  的安装,这些都可以在完成功能的时候加上,方法网上可以找到。

调试服务可以使用附加进程的方式,也可以直接将功能组件开发好调用或者是设置调试线程等方法进行调试,也可以建立测试调试。

C# 开发windows 服务


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论