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服務之後,再次運行仍是報同樣的錯。

相關文章
相關標籤/搜索