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

首頁 > 編程 > C# > 正文

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

2019-10-29 21:16:15
字體:
來源:轉載
供稿:網友

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

一、創建Windows服務

1)用VS新建Windows 服務項目

C#,Windows,Service

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文件以及兩個安裝組件,如下:

C#,Windows,Service

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目錄下,此時解決方案的目錄結構如下:

C#,Windows,Service

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 + "//Logs"; if (!Directory.Exists(logDirectory)) {  Directory.CreateDirectory(logDirectory); } string filePath = logDirectory + "//" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; File.AppendAllText(filePath, logInfo); } catch {  } } }}

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

C#,Windows,Service

二、安裝windows服務

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

C#,Windows,Service

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

C#,Windows,Service

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

C#,Windows,Service

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

三、調試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)在調試服務的其他事件或方法時,同樣可以用到。

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

C#,Windows,Service

C#,Windows,Service

四、卸載windows服務

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

C#,Windows,Service

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

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


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品视频播放| 欧美最猛性xxxxx亚洲精品| 国产激情久久久久| 久久成人人人人精品欧| 日韩h在线观看| 亚洲精品98久久久久久中文字幕| 亚洲aa在线观看| 国产精品69精品一区二区三区| 久久久久久国产精品久久| 91国产视频在线播放| 久久精品国产2020观看福利| 91精品综合视频| 国产视频观看一区| 久久99视频免费| 久久久久久一区二区三区| 欧美激情免费视频| 国产精品十八以下禁看| 国产成人精品综合| 97在线视频精品| 久久影视电视剧免费网站| 91精品视频在线看| 夜夜嗨av一区二区三区免费区| 亚洲国产私拍精品国模在线观看| 亚洲毛片在线观看| 亚洲国产精品电影在线观看| 色老头一区二区三区| 日韩精品黄色网| 综合网中文字幕| 欧美日韩国产精品一区二区三区四区| 亚洲美女在线视频| 日韩av手机在线观看| 色yeye香蕉凹凸一区二区av| 欧美日韩国产一中文字不卡| 国产精品久久久久久亚洲影视| 不卡伊人av在线播放| 欧美在线免费视频| 国产精品稀缺呦系列在线| 91精品国产沙发| 国产精品色视频| 国产精品99久久久久久久久久久久| 777777777亚洲妇女| 欧美天天综合色影久久精品| 日韩欧美在线免费| 欧美电影免费播放| 欧美激情视频一区二区| 日韩中文有码在线视频| 这里只有精品在线观看| 亚洲韩国日本中文字幕| 亚洲黄色免费三级| 亲子乱一区二区三区电影| 午夜精品视频网站| 欲色天天网综合久久| 日韩在线中文视频| 日韩av黄色在线观看| 热re99久久精品国产66热| 亚洲精品日产aⅴ| 欧美一区二区三区……| 国产日韩精品入口| 久久综合免费视频| 夜夜嗨av色一区二区不卡| 国产精品成人播放| 欧美国产第二页| 成人福利免费观看| 亚洲第一区在线观看| 91a在线视频| 久久免费在线观看| 久久99国产精品久久久久久久久| 性色av一区二区三区在线观看| 亚洲天堂免费观看| 日韩欧美在线视频| 国产精品久久久久久久久免费看| 精品久久香蕉国产线看观看gif| 久久精品男人天堂| 成人黄色午夜影院| 日韩美女视频在线观看| 亚洲色在线视频| 国产亚洲精品久久久久动| 成人精品在线视频| 国产成人拍精品视频午夜网站| 亚洲一区二区久久久久久久| 亚洲精品在线视频| 日韩av电影国产| 热久久美女精品天天吊色| 中文字幕欧美亚洲| 亚洲欧美激情在线视频| 羞羞色国产精品| 久久久国产成人精品| 性欧美在线看片a免费观看| 91精品国产高清自在线看超| 久久久久久美女| 午夜精品久久久久久久久久久久久| 美女视频黄免费的亚洲男人天堂| 久久久精品网站| 国产精品嫩草影院久久久| 亚洲国产精品国自产拍av秋霞| 亚洲午夜女主播在线直播| 精品久久久在线观看| 国产成人精品免费久久久久| 精品久久久视频| 日韩av免费观影| 九九精品视频在线观看| 亚洲高清在线观看| 久久久久久久亚洲精品| 亚洲网址你懂得| 国产精品欧美一区二区| 国产视频一区在线| 97在线看免费观看视频在线观看| 8x拔播拔播x8国产精品| 国产精品毛片a∨一区二区三区|国| 日本精品性网站在线观看| 亚洲国产精品va在线观看黑人| 日韩中文av在线| 欧美亚洲国产日本| 国产日韩欧美电影在线观看| 久久天天躁狠狠躁夜夜av| 国产成人精品久久二区二区91| 91亚洲永久免费精品| 亚洲国产成人精品女人久久久| 欧美精品在线观看| 日本成人精品在线| 国产成人av网| 久久久久亚洲精品成人网小说| 亚洲成人精品视频| 992tv在线成人免费观看| 亚洲欧美综合另类中字| 国产一区二区三区欧美| 亚洲乱码国产乱码精品精天堂| 97在线视频精品| 亚洲第一福利在线观看| www.久久撸.com| 中文字幕亚洲图片| 欧美成人午夜剧场免费观看| 日韩av片永久免费网站| 亲爱的老师9免费观看全集电视剧| 欧美最猛性xxxxx亚洲精品| 精品久久久久久久久久ntr影视| 精品久久久免费| 伊人久久久久久久久久| 国产一区二区丝袜高跟鞋图片| 中文字幕在线日韩| 亚洲福利在线视频| 欧美日韩在线第一页| 国产精品自产拍在线观看中文| 久久在精品线影院精品国产| 最近中文字幕mv在线一区二区三区四区| 国产精品福利在线| 欧美午夜电影在线| 国产精品国产三级国产专播精品人| 欧美三级免费观看| 国语自产精品视频在免费| 欧美国产在线电影| 久久久视频精品| 亚洲精品自拍第一页| 欧美最猛性xxxxx免费| 日韩精品在线观看一区| 57pao成人永久免费视频| 精品久久久久久久久久久| 91老司机在线| 午夜精品福利视频| 深夜福利日韩在线看| 欧美夫妻性生活xx| 日韩成人黄色av| 久久精品电影网| 国产精品日韩在线播放|