亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#使用Windows Service的簡單教程(創建、安裝、卸載、調試)

2020-01-24 00:51:36
字體:
來源:轉載
供稿:網友

前言:Microsoft Windows 服務能夠創建在它們自己的 Windows 會話中可長時間運行的可執行應用程序。這些服務可以在計算機啟動時自動啟動,可以暫停和重新啟動而且不顯示任何用戶界面。這使服務非常適合在服務器上使用,或任何時候,為了不影響在同一臺計算機上工作的其他用戶,需要長時間運行功能時使用。還可以在不同于登錄用戶的特定用戶帳戶或默認計算機帳戶的安全上下文中運行服務。本文就向大家介紹如何運用C#來創建、安裝、卸載、調試Windows Service程序。

一、創建Windows服務

1)用VS新建Windows 服務項目

2)默認生成文件包括Program.cs,Service1.cs。重命名Service1.cs為你的服務名或刪除Service1.cs文件然后創建自己的服務文件,假設取服務名字為MyService。注意:如果是刪除Service1.cs文件然后創建自己的服務文件,需要將Program.cs文件里的Service1修改為MyService。

MyService.cs屬性窗口中,相關屬性如下:

Autolog      是否自動寫入系統的日志文件
CanHandlePowerEvent  服務時候接受電源事件
CanPauseAndContinue 服務是否接受暫?;蚶^續運行的請求
CanShutdown        服務是否在運行它的計算機關閉時收到通知,以便能夠調用 OnShutDown 過程
CanStop 服務是否接受停止運行的請求
ServiceName 服務名

注意:CanPauseAndContinue和CanShutdown的默認值均為False,要想使服務的OnPause()、OnContinue()、OnShutdown()起作用,需要將CanPauseAndContinue和CanShutdown屬性值設置為True。

3)雙擊MyService.cs服務文件,在左側設計模式中,右鍵點擊“添加安裝程序”(或者在MyService.cs的屬性窗口的下方點擊添加“添加安裝程序”;如果看不到“添加安裝程序”的可點鏈接,可以右鍵屬性窗口,點擊“命令(C)”后就會出來了。注意:是屬性窗口而不是文件屬性窗口),會自動生成Projectinstaller.cs文件以及兩個安裝組件,如下:

4)單擊“serviceProcessInstaller1”,在其屬性窗口中設置Account帳號方式,建議為LocalService(當然也可以Account屬性改為 LocalSystem,這樣,不論是以哪個用戶登錄的系統,服務總會啟動)。

5)單擊“serviceInstaller1”,在其屬性窗口設置屬性:

  a)Description 服務描述,直接顯示到Windows服務列表中的描述;

  b)DisplayName 服務顯示名稱,直接顯示到Windows服務列表中的名稱;

  c)ServiceName 服務進程名稱,安裝與卸載服務時的唯一標識。

具體設置如上圖所示。

6)創建安裝服務批處理文件Install.bat,可以創建記事本,然后修改后綴為bat,記事本內容如下:

%SystemRoot%/Microsoft.NET/Framework/v4.0.30319/installutil.exeWindowsServiceDemo.exe
Net StartMyService
sc config MyServicestart= auto
pause

注意:記事本另存為時設置編碼為ANSI

說明:第二行為啟動服務,第三行為設置服務為自動運行,這兩行視服務形式自行選擇。如果需要查看腳本運行狀況,在腳本最后一行加入pause。

7)同理創建卸載服務批處理文件Uninstall.bat,內容如下:

%SystemRoot%/Microsoft.NET/Framework/v4.0.30319/installutil.exe /uWindowsServiceDemo.exe
pause

8)將Install.bat以及Uninstall.bat這兩個文件添加到bin/Debug目錄下,此時解決方案的目錄結構如下:

9)寫服務代碼,以向文本文件寫入文本記錄系統時間為例:

using System;using System.IO;using System.Diagnostics;using System.ServiceProcess;using System.Timers;namespace WindowsServiceDemo{ public partial class MyService : ServiceBase { private Timer time = new Timer(); public MyService() { InitializeComponent(); } protected override void OnStart(string[] args) { #if DEBUG if (!Debugger.IsAttached) Debugger.Launch(); Debugger.Break(); #endif WriteLog("服務啟動,時間:" + DateTime.Now.ToString("HH:mm:ss") + "/r/n"); time.Elapsed += new ElapsedEventHandler(MethodEvent); time.Interval = 60 * 1000;//時間間隔為2秒鐘 time.Start(); } protected override void OnStop() { #if DEBUG if (!Debugger.IsAttached) Debugger.Launch(); Debugger.Break(); #endif WriteLog("服務停止,時間:" + DateTime.Now.ToString("HH:mm:ss") + "/r/n"); } protected override void OnPause() { #if DEBUG if (!Debugger.IsAttached) Debugger.Launch(); Debugger.Break(); #endif WriteLog("服務暫停,時間:" + DateTime.Now.ToString("HH:mm:ss") + "/r/n"); base.OnPause(); } protected override void OnContinue() { #if DEBUG if (!Debugger.IsAttached) Debugger.Launch(); Debugger.Break(); #endif WriteLog("服務恢復,時間:" + DateTime.Now.ToString("HH:mm:ss") + "/r/n"); base.OnContinue(); } protected override void OnShutdown() { WriteLog("計算機關閉,時間:" + DateTime.Now.ToString("HH:mm:ss") + "/r/n"); base.OnShutdown(); } private void MethodEvent(object source, System.Timers.ElapsedEventArgs e) { time.Enabled = false; string result = string.Empty; try { //......... result = "執行成功,時間:" + DateTime.Now.ToString("HH:mm:ss") + "/r/n"; } catch (Exception ex) { result = "執行失敗,原因:" + ex.Message + "/r/n"; } finally { WriteLog(result); time.Enabled = true; } } /// <summary> /// 日志記錄 /// </summary> /// <param name="logInfo"></param> private void WriteLog(string logInfo) { try { string logDirectory = AppDomain.CurrentDomain.BaseDirectory + "http://Logs"; if (!Directory.Exists(logDirectory)) {  Directory.CreateDirectory(logDirectory); } string filePath = logDirectory + "http://" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; File.AppendAllText(filePath, logInfo); } catch {  } } }}

注意:代碼編寫完成后,你無法點擊通過啟動按鈕或按F5來運行或調試服務,會彈出如下圖所示的警告:

二、安裝windows服務

項目生成成功后,定位到bin/Debug目錄,以管理員身份運行Install.bat安裝服務,成功結果如下圖:

這時,“我的電腦”右鍵,選擇“管理”,選擇“服務和應用程序”下的“服務”,就可以看到服務已安裝,如下圖:

同時,Debug文件夾里有了Logs文件夾,Logs文件夾里有txt文檔,內容如下:

可以看到,每分鐘執行一次。

三、調試windows服務

1)通常的處理辦法是,在service運行后, 在調試器中選擇“附加到進程”,附加自己的服務即可調試。但此法有局限性,例如在service啟動時的OnStart事件中的代碼, 基本上很難調試,往往當attach到我們的service的時候,這部分代碼已經執行過了。當然了,你可以讓OnStart事件之前先睡個20s,趁著服務睡覺的時候趕緊“附加到進程”。System.Threading.Thread.Sleep(1000 * 20);

2)我的做法是,在OnStart事件的最開始部分加上“Debugger.Launch();”的調用, 當service運行到此處時,將會彈出一個選擇調試器的對話框,同時暫停在當前位置。這樣,我們就做到了在代碼中手動的啟動調試器。

說明:a)Debugger.Launch()方法的作用是“啟動調試器并將其連接到進程”;

   b)可以手動設置斷點,也可以用“Debugger.Break();”動態設置斷點;

   c)為了避免多個調試器實例,可以用“Debugger.IsAttached”屬性判斷調試器是否已附加到進程,代碼片段:

             if (!Debugger.IsAttached) Debugger.Launch();

   d)為了使調試只在Debug模式下生效,Release模式下無效,可以用條件編譯來處理,代碼片段如下:

#if DEBUG if (!Debugger.IsAttached) Debugger.Launch(); Debugger.Break(); #endif

   關于條件編譯,請查看我的另一篇博客:C#-#define條件編譯

   e)在調試服務的其他事件或方法時,同樣可以用到。

彈出選擇調試器的對話框,以及調試界面如下圖所示:

四、卸載windows服務

卸載服務,同樣以管理員身份運行Uninstall.bat即可,成功結果如下圖:

參考鏈接:https://msdn.microsoft.com/zh-cn/library/windows/desktop/system.diagnostics.debugger(v=vs.110).aspx

源碼下載:http://xiazai.VeVB.COm/201701/yuanma/WindowsService(VeVB.COm).rar

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品久久久久| 日韩av中文字幕在线播放| 欧美夫妻性生活xx| 成人免费视频a| 国产精品一区二区三区毛片淫片| 欧美大片欧美激情性色a∨久久| 国产精品一二区| 亚洲娇小xxxx欧美娇小| 夜夜躁日日躁狠狠久久88av| 欧美在线影院在线视频| 欧美午夜精品久久久久久久| 一区二区三区日韩在线| 欧美亚洲在线观看| 亚洲视频在线视频| 亚洲性线免费观看视频成熟| 国产精品欧美亚洲777777| 亚洲成人网久久久| 91精品国产综合久久香蕉922| 欧美电影在线播放| 亚洲一区999| 亚洲人成在线观| 8090理伦午夜在线电影| 国产做受69高潮| 国产又爽又黄的激情精品视频| 久久久精品久久| 91精品国产网站| 亚洲色图校园春色| 国产原创欧美精品| 国产精品久久av| 亚洲国产婷婷香蕉久久久久久| 九色成人免费视频| 97超级碰碰人国产在线观看| 热re91久久精品国99热蜜臀| 欧美精品中文字幕一区| 亚洲在线视频福利| 久久99精品久久久久久青青91| 国产免费一区视频观看免费| 久久亚洲综合国产精品99麻豆精品福利| 最近中文字幕mv在线一区二区三区四区| 26uuu日韩精品一区二区| 精品美女国产在线| 精品爽片免费看久久| 成人深夜直播免费观看| 97在线观看免费高清| 日韩资源在线观看| 亚洲精品久久久久中文字幕欢迎你| 7m第一福利500精品视频| 国产精品久久精品| 中文字幕亚洲欧美在线| 亚洲精品小视频在线观看| 亚洲国产成人精品久久久国产成人一区| 不卡av在线网站| 国产精品久久91| 欧美老少配视频| 国产91久久婷婷一区二区| 亚洲欧洲第一视频| 丁香五六月婷婷久久激情| 91久热免费在线视频| 国产精品午夜视频| 日韩欧美在线视频日韩欧美在线视频| 亚洲成av人影院在线观看| 精品国产一区二区三区久久久| 欧美日韩亚洲一区二区| 91亚洲永久免费精品| 欧美成人免费播放| 欧美成年人视频网站| 国产精品∨欧美精品v日韩精品| 国产69精品久久久| 国语自产精品视频在线看抢先版图片| 国产精品igao视频| 91av在线国产| 亚洲精品国偷自产在线99热| 久久免费观看视频| 亚洲欧美一区二区激情| 国产欧美一区二区三区视频| 久久躁狠狠躁夜夜爽| 国产成人精品在线视频| 亚洲人成免费电影| 国产精品极品尤物在线观看| 色偷偷888欧美精品久久久| 国产精品精品视频| 欧美高清无遮挡| 国产自产女人91一区在线观看| 国产亚洲a∨片在线观看| 欧美精品在线免费观看| 国产专区精品视频| 国产91精品黑色丝袜高跟鞋| 亚洲免费av电影| 亚洲国产97在线精品一区| 亚洲自拍偷拍色图| 亚洲福利小视频| www.欧美三级电影.com| 欧美激情在线视频二区| 欧美高跟鞋交xxxxhd| 国产精品久久二区| 欧美国产精品日韩| 国产精品爽黄69天堂a| 亚洲精品日韩丝袜精品| 久久99国产精品自在自在app| 欧美在线一级va免费观看| 欧美激情久久久| 欧美最猛性xxxxx(亚洲精品)| 国产精品com| 福利视频第一区| 一区二区三区国产视频| 欧美性高跟鞋xxxxhd| 亚洲欧美制服中文字幕| 中文字幕日本精品| 久久久久国产精品一区| 欧美中文字幕在线视频| 亚洲成年人在线| 欧美激情第三页| 国产精品久久久久免费a∨| 成人精品一区二区三区电影黑人| 精品国产一区二区三区久久狼黑人| 久久精品国产欧美亚洲人人爽| 国产一区私人高清影院| 久久久黄色av| 国产视频精品久久久| 日韩欧美主播在线| 欧美激情xxxxx| 亚洲精品v欧美精品v日韩精品| 日韩毛片在线观看| 26uuu亚洲伊人春色| 欧美自拍视频在线| 欧美自拍视频在线观看| 少妇高潮久久77777| 少妇高潮久久久久久潘金莲| 日韩美女视频免费在线观看| 性欧美暴力猛交69hd| 日韩最新中文字幕电影免费看| 欧美日韩激情视频| 久久精品视频中文字幕| 欧美高清无遮挡| 午夜伦理精品一区| 精品福利在线视频| 亚洲成人中文字幕| 亚洲字幕一区二区| 国外视频精品毛片| 97精品久久久中文字幕免费| 亚洲国产精品久久久久久| 国产成人欧美在线观看| 亚洲xxxx妇黄裸体| 456亚洲影院| 久久久国产视频91| 欧美黑人国产人伦爽爽爽| 狠狠躁18三区二区一区| 久久久久久久久国产精品| 亚洲成色999久久网站| 亚洲欧美日韩久久久久久| 午夜精品理论片| 国产精品午夜视频| 亚洲综合中文字幕在线观看| 国外成人免费在线播放| 成人在线国产精品| 91天堂在线观看| 日韩一区二区福利| 亚洲国产精品久久久久秋霞蜜臀| 欧美大荫蒂xxx| 久久久噜噜噜久久| 欧美日本精品在线| 色狠狠久久aa北条麻妃| 97avcom| 成人妇女免费播放久久久|