windows 服务实例

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

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

剩下的都是我本身整理的。windows

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

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

代码以下ui

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服务启动失败,说什么没法从命令行或调试器启动服务。this

windows  服务启动失败

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

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

 

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

相同的功能彻底能够在SQL Server的做业中进行,并且方便快捷,固然windows服务确定有其余的优点,本文只是举个例子,因此不要用这个来板砖我了。

若是是高手,但愿能解决Windows服务启动失败的报错问题,当我安装完毕windows服务之后,再次运行仍是报同样的错。

相关文章
相关标签/搜索