總結下今天將一個程式轉為windows服務(用C#)

來源:互聯網
上載者:User
背景

同事寫的一個程式每天定時將一個二進位檔案分析,轉存為資料庫。目前這個程式不便之處是伺服器重啟後必須要登入系統,開啟這個程式才可以。還有業務出現了一些變化,需要修改程式,加之前也沒寫過windows服務程式,所以趁周末學習一下。

過程

肯定是先上部落格園搜尋一下,找了個blog看看,熟悉一下。

開啟vs2008,建立一個windows服務項目,開始把代碼搬過來。

 

  1.  修改預設產生的Service1.cs檔案名稱使之符合公司規範,並相應修改Program裡的類名
  2. 在下面兩個方法中初始化,記錄一下事件protected override void OnStart(string[] args)

    {
    }
    protected override void OnStop()
    {
    }

  3. 記錄事件是在工具列拖了個eventLog,這個注意需要自己指定source屬性。這樣在系統日誌裡面就可以看到一些日誌了。
eventLog.WriteEntry(message + " 時間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm", DateTimeFormatInfo.InvariantInfo));
  1. 再拖一個Timer控制項,用於定時執行
  2. 在Service.cs上點擊右鍵添加一個安裝程式,serviceProcessInstaller中設定登入類型,serviceInstaller設定服務名,描述和啟動類型
  3. 剩下的就是把同事的代碼整理整理,沒敢說是重構,感覺重構屬於高深技術,呵呵
  4. 在OnStart中設定Timer的Enable屬性,在Timer的timer_Tick事件中執行。
  5. 用於以前的程式用到了config配置一些東西,建立一個config檔案,自己建立的不能自動copy到debug目錄好像,需要自己在項目屬性中設定一下,如果不嫌麻煩,可以手動拷貝過去。
  6. ConfigurationManager.AppSettings["SourceServer"]這個需要添加引用System.configuration。
  7. 編譯通過,下面就是安裝這個服務進行測試了,不能像一般的程式那樣,直接運行,這個需要安裝到系統服務,然後用附加程式的方法調試。安裝服務最好吧installutil.exe拷貝一個到程式目錄,這樣就不用每次都用那個vs的命令列進了。以後安裝也方便。 問題

    調試發現並沒有執行 timer_Tick裡的程式,繼續部落格園搜尋,發現VS2008用工具箱拖的那個timer是system.windows.forms下面的timer,此timer在多線程下有問題,而windows服務預設就是起的多線程,所以沒有執行。不知道ms為啥在這個裡面拖出來的是這個timer,還是我的個例。

    換成

    System.Timers.Timer timer = new System.Timers.Timer();
    timer.Enabled = true;
    timer.Interval = 600000;

    timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Tick);

     

     搞定。

    遺留 

     從附加程式的方法可以調試,但是不能調試OnStart裡面的代碼啊,因為只要服務運行起來後才可以附加,等你附加上後Onstart早跑過了。

    所以不知道這個函數裡面的代碼怎麼調試?難道是在這個裡面加sleep延遲一下?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.