1. 程式人生 > >C#創建windows服務並發布

C#創建windows服務並發布

copy des 令行 windows服務 partial window 恢復 單擊 writer

創建window 服務

新建一個window 服務項目MyService,如下圖

技術分享圖片

切換到代碼視圖修改.

[csharp] view plaincopy
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Diagnostics;
  6. using System.IO;
  7. using System.Linq;
  8. using System.ServiceProcess;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace MyService
  12. {
  13. public partial class Service1 : ServiceBase
  14. {
  15. //定時器
  16. System.Timers.Timer t = null;
  17. public Service1()
  18. {
  19. InitializeComponent();
  20. //啟用暫停恢復
  21. base.CanPauseAndContinue = true;
  22. //每5秒執行一次
  23. t = new System.Timers.Timer(5000);
  24. //設置是執行一次(false)還是一直執行(true);
  25. t.AutoReset = true;
  26. //是否執行System.Timers.Timer.Elapsed事件;
  27. t.Enabled = true;
  28. //到達時間的時候執行事件(theout方法);
  29. t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
  30. }
  31. //啟動服務執行
  32. protected override void OnStart(string[] args)
  33. {
  34. string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "啟動";
  35. WriteLog(state);
  36. }
  37. //停止服務執行
  38. protected override void OnStop()
  39. {
  40. string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "停止";
  41. WriteLog(state);
  42. }
  43. //恢復服務執行
  44. protected override void OnContinue()
  45. {
  46. string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "繼續";
  47. WriteLog(state);
  48. t.Start();
  49. }
  50. //暫停服務執行
  51. protected override void OnPause()
  52. {
  53. string state = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + "暫停";
  54. WriteLog(state);
  55. t.Stop();
  56. }
  57. public void WriteLog(string str)
  58. {
  59. using (StreamWriter sw = File.AppendText(@"d:\service.txt"))
  60. {
  61. sw.WriteLine(str);
  62. sw.Flush();
  63. }
  64. }
  65. public void theout(object source, System.Timers.ElapsedEventArgs e)
  66. {
  67. WriteLog("theout:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
  68. }
  69. }
  70. }


解釋:OnStart和OnStop分別是服務器啟動和停止後,所發生的事件操作方法.定義了一個定時器,每隔5秒執行一次(theout方法),因為暫停恢復功能默認是不啟用的,需要設置CanPauseAndContinue屬性啟用此功能,同時重寫OnStop和OnContinue方法,添加自己的邏輯代碼.

將服務程序service1.cs 切換到視圖模式,用鼠標右鍵單擊設計視圖選擇“添加安裝程序”選項,此後在項目中自動增加了一個ProjectInstaller.cs,

如下圖

技術分享圖片

打開ProjectInstaller,修改serviceInstaller1組件屬性

Description= 我的服務備註 服務備註說明

DisplayName=我的服務 服務友好名字

ServiceName=MyService 安裝服務器名字

StartType=Automatic 服務類型

ü Manual 服務安裝後,必須手動啟動。

ü Automatic 每次計算機重新啟動時,服務都會自動啟動。

ü Disabled 服務無法啟動。

並設計serviceProcessInstaller1的屬性Account=LocalSystem

運行編譯,一個簡單的windows服務已經開發完成.

安裝window服務

安裝命令:InstallUtil.exe MyServiceLog.exe

InstallUtil存在路徑為:C:\WINDOWS\Microsoft.NET\Framework\.NET版本號

復制C:\WINDOWS\Microsoft.NET\Framework\版本號 路徑中的InstallUtil.exe 到bin/debug或bin/release文件夾中,在命令行窗口中直接運行命令

InstallUtil.exe MyServiceLog.exe,在系統中註冊這個服務,使它建立一個合適的註冊項,如下圖:

技術分享圖片

然後再window服務列表中,啟動MyServiceLog服務

卸載window 服務

命令:InstallUtil.exe MyServiceLog.exe /u

如果修改這個服務,但是路徑沒有變化的話是不需要重新註冊服務的,直接停止服務,然後用新的文件覆蓋原來的文件即可,如果路徑發生變化,應該先卸載這個服務,然後重新安裝這個服務。

C#創建windows服務並發布