新建第一個windows服務(Windows Service)


  首先,請原諒我是一個小白,一直到前段時間才在工作需要的情況下寫了第一個windows服務。首先說一下為什么寫這個windows服務吧,也就是什么需求要我來寫這么一個東西。公司的項目中,需要一個預警功能(從數據庫里取出需要的日期,在這個日期的前兩天向相應的用戶以短信的形式發出提醒)。因為不是一個日期,並且日期不是固定的。所以需要每一天都要在規定的時間向服務器發出請求,這需要后台自動執行的事件。我一直覺得這種功能很牛X的,就因為它們是自動執行的,哈哈。最后就用到了這么這個沒有寫過的windows服務。其實前面在做這個項目的時候,也遇到了類似的事情(小區居民回復物業系統發出的短信,比如短信投票),需要及時接受並且做出相應的回復或操作。為了解決這個問題我是做了一個定時器放在Global.asax文件里的。但是這中方法有個弊端,就是需要啟動項目才能讓計時器跑起來,而Windows Service就完美的解決了這個問題。只要在服務器上啟動服務,不管項目是否運行,服務里的程序依然可以運行。啰啰嗦嗦的也不知道講清楚沒有,開始記錄新建Windows Service的過程吧。

  因為是新建第一個Windows Service,所以很艱難,一個字——累!因為周圍的同事、同學因為工作原因基本上都很少接觸這個東西。首先百度了方法,在這里也詳細記錄下來,請原諒,因為我腦袋的內存小,怕以后不知道怎么做,只能詳細的記錄了。哦,我用的是asp.net。

1.首先創建一個空的解決方案,主要是記錄windows服務,所以asp.net里面什么也沒有操作

 

2.新建windows服務

 

3.在windows服務內編寫程序,首先切換到Service1的代碼視圖,從代碼中兩個程序已經自動生成的兩個方法名字可以看出,OnStart()為開始,OnStop()為結束。其實還有暫停OnPause(),繼續OnContinue()兩個方法。

 1 namespace WindowsService
 2 {
 3     public partial class Service1 : ServiceBase
 4     {
 5         public Service1()
 6         {
 7             InitializeComponent();
 8         }
 9 
10         //啟動服務時執行
11         protected override void OnStart(string[] args)
12         {
13         }
14         //停止服務時執行
15         protected override void OnStop()
16         {
17         }
18     }
19 }

 

我把我的代碼貼出來吧

 1 namespace WinService
 2 {
 3     public partial class Service1 : ServiceBase
 4     {
 5         public Service1()
 6         {
 7             InitializeComponent();
 8         }
 9 
10         System.Timers.Timer timer = new System.Timers.Timer();
11         common com = new common();
12         SMS sms = new SMS();
13         protected override void OnStart(string[] args)
14         {
15             timer.Enabled = true;
16             timer.Interval = 60000;//執行間隔時間,單位為毫秒    每分鍾執行一次
17             timer.Start();
18             timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer1_Elapsed);
19         }
20 
21         protected override void OnStop()
22         {
23             timer.Enabled = false;
24         }
25 
26         private void Timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
27         {
28             int intHour = e.SignalTime.Hour;    //獲得當前的小時
29             int intMinute = e.SignalTime.Minute;    //獲得當前的分鍾
30             int intSecond = e.SignalTime.Second;    //獲得當前的秒
31 
32             /*每分鍾執行一次*/
33             //更新投票結束狀態
34             com.updateVoteState();
35             //短信
36             sms.SMSVote();
37             /*每分鍾執行一次*/
38 
39             // 每天的10:30執行這個方法
40             int iHour = 10;
41             int iMinute = 30;
42             if (intHour == iHour && intMinute == iMinute )
43             {
44                 //預警功能
45                 com.Warning();
46             }
47         }
48 
49     }
50 }

我在服務里面放了,每分鍾執行的方法,有每天只需的方法。

4.要實現的功能都寫好了,下面是添加服務的安裝程序了。首先添加

在工具箱中找到serviceProcessInstaller和serviceInstaller,並添加到Installer.cs中

 

設置serviceInstaller

設置serviceProcessInstaller

 

5.前的都做好了,服務基本上就完成了,最后一步就是注冊了。前邊的在網上的各位大神的幫助下很順利的完成了,就是在注冊這里把我難到了,一直失敗一直失敗,弄到我都沒有脾氣了。百度新建windows服務,大部分后面的注冊介紹的方法是這樣的。
   (1)打開命令提示
 (2)輸入installutil  C:\Users\win10\Documents\Visual Studio 2012\Projects\WindowsService\bin\Debug\WindowsService.exe(安裝)。
          或者是 輸入C:\Windows\Microsoft.NET\Framework\v4.0.30319(安裝)

  這些方法好像在win7上可以安裝成功,可是我安裝的是win10的就悲催了,怎么都不能實現。最后還是一個同學做過,告訴了我一種方法

  (1)以管理員身份運行命令提示
  (2)輸入sc create test binPath="C:\Users\win10\Documents\Visual Studio 2012\Projects\WindowsService\bin\Debug\WindowsService.exe"(注冊)
    sc start test(啟動)
    sc start test   (啟動服務)
    sc stop test   (停止服務)
    sc delete test  (從注冊表刪除服務)

  另外,服務的名稱不知道是不是必須是解決方面的名字哦,我用其它的好像都不行,沒有認真的去試這個。不知道為什么百度新建windows服務是就是沒有找到這種注冊服務的方法,百度sc create是就都出現了,所以在注冊這里把弄的很狼狽。  下面這樣一段是我在百度百科上看到的,可以參考一下

  Sc create 是Windows DOS命令,用於創建Windows服務。適用於:Windows 7,Windows Server 2003,Windows Server 2003 R2, Windows Server 2003 with SP1, Windows Server 2003 with SP2,Windows Server 2008, Windows Server 2008 R2,Windows Vista。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM