windows 窗體應用程序是在用戶登錄後才運行的。特別是對於服務器這種多用戶系統,盡管設置了開機自啟動,但是在程序運行過程中,運行改程序的用戶被注銷了,程序就關掉了。除非有人重新登錄或服務器重啟。
如果想要程序一直運行在服務器上,最好是把程序寫成windows服務程序。這樣程序會隨著系統的自動啟動而啟動,自動關閉而關閉,不需要用戶直接登錄,直接開機就可以啟動。
注意windows服務程序是沒有界面的,所以要定義日志文件保存運行過程中出現的問題。如果用到了定時器也要是系統的定時器。
下面示例如何建windows服務程序,以VS2013為例:
1. 建立windows服務
看看VS都生成了什麼
2. 重命名Service1,這個名稱是以後運行的windows服務的名稱,這裡改成SQLServerSyncService.cs
打開SQLServerSyncService.cs,添加後台代碼
namespace SQLServerSyncService { public partial class SQLServerSyncService : ServiceBase { private System.Timers.Timer timer1;//系統定時器 public int No = 0; public SQLServerSyncService() { InitializeComponent(); } protected void timer1_Tick(object source, ElapsedEventArgs e) { timer1.Stop(); int timek = 0; OperatorDatatable test = new OperatorDatatable(); if (test.sw != null) { test.sw.WriteLine("第" + (No + 1).ToString() + "次同步數據庫錯誤信息:"); } DateTime time1 = DateTime.Now; try { if (test.ReadDataFromDatabase()) { test.WriteDataToDatabase(); bool flag = false; do { flag = test.DeleteSyncData(); Thread.Sleep(1000); } while (!flag); } } finally { test.DisposeAllResource(); test.CloseServer(); test.SaveLogFile(); DateTime time2 = DateTime.Now; timek = (time2 - time1).Hours * 3600 + (time2 - time1).Minutes * 60 + (time2 - time1).Seconds; } No++; timer1.Start(); } protected override void OnStart(string[] args) { timer1 = new System.Timers.Timer(); timer1.Elapsed += new ElapsedEventHandler(timer1_Tick); string timestr = XMLConfig.GetValue("appSettings", "add", "SyncInterval", "value");//同步時間間隔 timer1.Interval = (int)(float.Parse(timestr) * 60 * 1000); timer1.AutoReset = true;//設置是執行一次(false)還是一直執行(true) timer1.Enabled = true;//是否執行System.Timers.Timer.Elapsed事件 } protected override void OnContinue() {//服務恢復時 timer1.Enabled = true; } protected override void OnStop() { timer1.Enabled = false; } } }
3.添加安裝程序,主要是為了設置windows服務程序,也可以自己寫代碼實現,但是何必呢。
右鍵
會出現兩個組件
右鍵serviceInsraller1,選擇屬性,將ServiceName的值改為SQLServerSyncService。(此名稱是以後服務的名稱)
右鍵serviceProcessInsraller1,選擇屬性,將Account的值改為LocalSystem。
生成解決方案,最後把生成的exe程序拷貝到方便記的目錄。次目錄是後續安裝生成的服務的路徑。
4.安裝該服務程序。 打開VS開發人員命令提示工具,注意要以管理員的身份運行,否則會報錯:Windows服務安裝異常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可 訪問的日志: Security
輸入命令InstallUtil.exe C:\Server\SQLServerSyncService.exe, 回車
5.服務程序安裝好了,啟動就好了
在上面的VS開發人員調試工具或者DOC下面輸入services.msc,回車彈出服務對話框,找到我們的服務程序,啟動就可以了