一、創建windows服務
1、用VS創建windows服務,結果如下:
2、刪除默認生成的Service1.cs文件,然后創建自己的服務文件(如:MyService),並修改Program.cs文件的代碼,如下:
此時,解決方案的目錄結構如下:
3、雙擊MyService.cs服務文件,在左側設計模式中,右鍵,點擊“添加安裝程序”,自動會生成Projectinstaller.cs文件以及兩個安裝組件,如下:
4、右鍵”ServiceProcessInstaller1“,選擇屬性,設置Account 帳號方式,建議為LocalService,如下:
5、右鍵”ServiceInstaller1“,選擇屬性,設置屬性
a)Description 服務描述,直接顯示到Windows服務列表中的描述;
b)DisplayName 服務顯示名稱,直接顯示到Windows服務列表中的名稱;
c)ServiceName 服務進程名稱,安裝與卸載服務時的唯一標識.
如下:
6、創建安裝服務批處理文件Install.bat,可以創建記事本,然后修改后綴為bat,記事本內容如下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe WindowsServiceDemo.exe
Net Start MyService
sc config MyService start= auto
pause
記事本另存為時設置編碼為ANSI,如下圖:
7、同理創建創建卸載服務批處理文件Uninstall.bat,內容如下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u WindowsServiceDemo.exe
pause
此時解決方案的目錄結構如下:
二、寫服務代碼
右鍵”MyService.cs“,選擇查看代碼,如下:
namespace WindowsServiceDemo { partial class MyService : ServiceBase { public MyService() { InitializeComponent(); } protected override void OnStart(string[] args) { // TODO: 在此處添加代碼以啟動服務。 } protected override void OnStop() { // TODO: 在此處添加代碼以執行停止服務所需的關閉操作。 } } }
下面實現自己的簡單功能,代碼如下:
using System; using System.Diagnostics; using System.IO; using System.ServiceProcess; using System.Timers; namespace WindowsServiceDemo { partial class MyService : ServiceBase { private Timer time = new Timer(); public MyService() { InitializeComponent(); } protected override void OnStart(string[] args) { WriteLog("服務啟動,時間:"+DateTime.Now.ToString("HH:mm:ss") + "\r\n"); time.Elapsed += new System.Timers.ElapsedEventHandler(MethodEvent); time.Interval = 2 * 1000;//時間間隔為2秒鍾 time.Start(); } protected override void OnStop() { WriteLog("服務停止,時間:" + DateTime.Now.ToString("HH:mm:ss") + "\r\n"); } private void MethodEvent(object source, System.Timers.ElapsedEventArgs e) { time.Enabled = false; string result = string.Empty; string startTime = DateTime.Now.ToString("HH:mm:ss"); try { //......... result = "執行成功,時間為:"+ startTime; } catch (Exception exp) { result = "失敗,原因:" + exp.Message; } finally { WriteLog(result); time.Enabled = true; } } /// <summary> /// 日志記錄 /// </summary> /// <param name="logInfo"></param> public void WriteLog(string logInfo) { try { string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "\\Logs"; if (!Directory.Exists(logDirectory)) { Directory.CreateDirectory(logDirectory); } string filePath = logDirectory + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; File.AppendAllText(filePath, logInfo); } catch { } } } }
具體功能是2秒鍾執行一次,並記錄日志。
三、安裝windows服務
重新生成整個解決方案,成功后,從項目所在文件夾賦值bin文件到某個自定義的文件夾,並將Install.bat和Uninstall.bat復制到bin下的Debug文件夾中。
以管理員身份運行Install.bat安裝服務,成功結果如下圖:
這是右鍵“我的電腦”,選擇“管理”,選擇“服務”,就可以看到服務已安裝,如下圖:
同時,Debug文件夾里有了Logs文件,Logs文件夾里有txt文檔,內容如下:
可以看到沒2秒鍾執行一次。
四、卸載windows服務
卸載服務,同樣以管理員身份運行Uninstall.bat即可。
五、調試windows服務
打斷點,在工具欄選“調試”下的“附加到進程”,附加自己的服務即可調試。