程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c# windows服務程序

c# windows服務程序

編輯:C#入門知識

c# windows服務程序


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,回車彈出服務對話框,找到我們的服務程序,啟動就可以了

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved