參考來源: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服務啟動失敗,說什麼無法從命令列或偵錯程式啟動服務。
這個問題先不管他,但是在我們按F5的那一剎那,這個工程資料夾的Debug目錄就生成了一個叫做Services1.exe的可執行檔案了——我們的目的已經達成了。接下來我們要做的就是把這個程式安裝到windows服務。
現在我們需要一個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服務。將其啟動後,每三秒就會在資料庫中插入一條資料了。
實驗結束後,別忘了用installutil /u services1.exe 的命令解除安裝掉這個服務哦,或是禁用服務。另外,如果更新了程式程式碼重新編譯,有了新的services1.exe,只要路徑沒變,就不需要重新安裝該服務的。
相同的功能完全可以在SQL Server的作業中進行,而且方便快捷,當然windows服務肯定有其他的優勢,本文只是舉個例子,所以不要用這個來板磚我了。
如果是高手,希望能解決Windows服務啟動失敗的報錯問題,當我安裝完畢windows服務以後,再次執行還是報一樣的錯。