• windows 服务实例


    参考来源:http://blog.csdn.net/morewindows/article/details/6858216

    参考来源: http://hi.baidu.com/tfantasy/item/aefa43d66b470a2b38f6f76c

    剩下的都是我自己整理的。

    在VS2012中新建一个Windows 服务的项目。然后在解决方案目录下找到Services1.cs,切换到代码视图。

    这里我代码的主要工作就是开机自动启动该windows服务,每三秒往数据库中插入一条数据。

    代码如下

    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.Threading.Tasks;
    using System.Data.SqlClient;
    
    namespace stopvoice
    {
        public partial class Service1 : ServiceBase
        {
            System.Timers.Timer timer1;  //计时器
            public Service1()
            {
                InitializeComponent();
            }
            protected override void OnStart(string[] args)  //服务启动执行
            {
                timer1 = new System.Timers.Timer();
                timer1.Interval = 3000;  //设置计时器事件间隔执行时间
                timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);
                timer1.Enabled = true;
            }
            protected override void OnStop()  //服务停止执行
            {
                this.timer1.Enabled = false;
            }
    
            private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                //执行SQL语句或其他操作
    
                //连接数据库
                string SQLCONNECT = @"server=192.168.1.212;database=testdb;uid=sa;pwd=888888";
                SqlConnection conn = new SqlConnection(SQLCONNECT);
                conn.Open();
    
                //通过SqlCommand 类的ExecuteNonQuery() 来返回受影响的行数。
                string SQLCOMMAND2 = "insert into tb1 values(999,999);";
                SqlCommand sqlcmd2 = new SqlCommand(SQLCOMMAND2, conn);
                //也可以用下面代替
                // sqlcmd.ConnectionString = SQLCOMMAND2
    
                int nResult = sqlcmd2.ExecuteNonQuery();
                Console.WriteLine("受影响行数:", +nResult);
                Console.ReadLine();
    
                conn.Close();
            }
    
        }
    }

    写完代码后在Service1.cs的设计界面右击,选择“添加安装程序”,会出现两个安装控件,将servicesInstaller1属性StartType设成Automatic就是开机自动启动,ServicesName就是在服务列表里的名称,可以自定义。servicesProcessInstaller1的属性设成LocalSystem。然后按F5 启动运行,会报错,提示Windows服务启动失败,说什么无法从命令行或调试器启动服务。

    windows  服务启动失败

    这个问题先不管他,但是在我们按F5的那一刹那,这个工程文件夹的Debug目录就生成了一个叫做Services1.exe的可执行文件了——我们的目的已经达成了。接下来我们要做的就是把这个程序安装到windows服务。

    现在我们需要一个installutil的安装程序工具,我们可以在C:WindowsMicrosoft.NETFrameworkv4.0.30319中找到他(也许你也能在其他版本里找到它)MSDN告诉我使用 Visual Studio 命令提示符或 Windows SDK 命令提示符可以直接调用到这个Installutil.exe,我试了一下还是提示说这货不是内部或外部命令,直截了当,把上面的路径加入环境变量,然后进入我们的CMD窗口吧。切换到刚刚那个项目的Debug目录下,输入命令installutil services1.exe(当然也许你的可执行文件不叫services1,我只是提醒一下),此时你在命令行输入services.msc回车,会发现服务列表里多出了一个你的windows服务。将其启动后,每三秒就会在数据库中插入一条数据了。

    实验结束后,别忘了用installutil  /u  services1.exe 的命令卸载掉这个服务哦,或是禁用服务。另外,如果更新了程序代码重新编译,有了新的services1.exe,只要路径没变,就不需要重新安装该服务的。

    相同的功能完全可以在SQL Server的作业中进行,而且方便快捷,当然windows服务肯定有其他的优势,本文只是举个例子,所以不要用这个来板砖我了。

    如果是高手,希望能解决Windows服务启动失败的报错问题,当我安装完毕windows服务以后,再次运行还是报一样的错。

  • 相关阅读:
    在放置不同图片尺寸时,应该选择合适的放置
    在腾讯开发应用中心上架apk所遇到的问题
    仿慕课网下拉加载动画
    android 视频的缩略图 缓存机制和 异步加载缩略图
    在做Android开发的,如何去掉滚动view在尽头时的阴影效果
    java中常见的模式之自定义观察者和java库中观察者
    在JAVA和android中常用的单列模式
    android 代码控制控件的长宽,小技巧
    IFrame 框架的用法简介
    PHP中RabbitMQ之amqp扩展实现(四)
  • 原文地址:https://www.cnblogs.com/ligongzi/p/3329820.html
Copyright © 2020-2023  润新知