欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于C#實(shí)現(xiàn)Windows服務(wù)的方法詳解

 更新時(shí)間:2022年09月16日 08:15:31   作者:常哥說編程  
在實(shí)際應(yīng)用過程中,有時(shí)候我們希望開發(fā)的程序,不需要界面,直接開機(jī)就可以長(zhǎng)時(shí)間運(yùn)行,這時(shí)候,我們可以考慮做成一個(gè)Windows服務(wù)。這篇文章跟大家介紹一下,如何基于C#實(shí)現(xiàn)Windows服務(wù)的創(chuàng)建、安裝、啟動(dòng)、停止和卸載,需要的可以參考一下

前言

在實(shí)際應(yīng)用過程中,有時(shí)候我們希望開發(fā)的程序,不需要界面,直接開機(jī)就可以長(zhǎng)時(shí)間運(yùn)行,這時(shí)候,我們可以考慮做成一個(gè)Windows服務(wù)。

這篇文章跟大家介紹一下,如何基于C#實(shí)現(xiàn)Windows服務(wù)的創(chuàng)建、安裝、啟動(dòng)、停止和卸載。

Windows服務(wù)介紹

Microsoft Windows 服務(wù)能夠創(chuàng)建在它們自己的 Windows 會(huì)話中可長(zhǎng)時(shí)間運(yùn)行的可執(zhí)行應(yīng)用程序。這些服務(wù)可以在計(jì)算機(jī)啟動(dòng)時(shí)自動(dòng)啟動(dòng),可以暫停和重新啟動(dòng)而且不顯示任何用戶界面。這使服務(wù)非常適合在服務(wù)器上使用,或任何時(shí)候,為了不影響在同一臺(tái)計(jì)算機(jī)上工作的其他用戶,需要長(zhǎng)時(shí)間運(yùn)行功能時(shí)使用。還可以在不同于登錄用戶的特定用戶賬戶或默認(rèn)計(jì)算機(jī)賬戶的安全上下文中運(yùn)行服務(wù)。

創(chuàng)建Windows服務(wù)

1、創(chuàng)建一個(gè)新項(xiàng)目,項(xiàng)目類型選擇Windows服務(wù),如下圖所示:

2、項(xiàng)目名稱修改為thinger.WindowsServiceDemo,創(chuàng)建完成界面如下所示:

3、為了方便區(qū)分,將類名Service1改成MyService。

4、在設(shè)計(jì)界面,右擊鼠標(biāo),會(huì)出現(xiàn)如下彈窗,選擇添加安裝程序,并點(diǎn)擊添加安裝程序。

5、點(diǎn)擊添加安裝程序之后,會(huì)自動(dòng)添加一個(gè)ProjectInstaller界面,里面有兩個(gè)組件,分別是serviceProcessInstaller和serviceInstaller。

6、先選擇serviceInstaller進(jìn)行屬性設(shè)置,主要可以設(shè)置以下屬性:

  • ServiceName:服務(wù)名稱,這個(gè)后續(xù)會(huì)使用到。
  • Description:描述,可以自己添加一下說明
  • StartType:?jiǎn)?dòng)類型,可以設(shè)置為手動(dòng)或自動(dòng)

7、接著選擇ProjectInstaller進(jìn)行設(shè)置,主要設(shè)置Account,指示用來運(yùn)行此服務(wù)的賬戶類型,可以設(shè)置為L(zhǎng)ocalSystem

8、設(shè)置完成之后,切換到MyService這個(gè)類,點(diǎn)擊切換到代碼視圖,我們可以看到后臺(tái)有一些自動(dòng)生成的代碼:

    public partial class MyService : ServiceBase
    {
        public MyService()
        {
            InitializeComponent();
        }
 
        protected override void OnStart(string[] args)
        {
        }
 
        protected override void OnStop()
        {
        }
    }

從名稱可以看出,這里重寫了OnStart和OnStop接口,可以在這里寫一些啟動(dòng)服務(wù)和停止服務(wù)的邏輯。

9、寫了一個(gè)簡(jiǎn)單的邏輯,就是每次服務(wù)啟動(dòng)或停止都會(huì)向指定的文件中寫入一串信息。

        protected override void OnStart(string[] args)
        {
            WriteInfo("服務(wù)啟動(dòng)");
        }
 
        protected override void OnStop()
        {
            WriteInfo("服務(wù)停止");
        }
 
        private string filePath = @"D:\ServiceLog.txt";
 
        private void WriteInfo(string info)
        {
            using (FileStream stream = new FileStream(filePath, FileMode.Append))
            {
                using (StreamWriter writer = new StreamWriter(stream))
                {
                    writer.WriteLine($"{DateTime.Now},{info}");
                }
            }
        }

10、點(diǎn)擊項(xiàng)目,右擊生成。

11、這樣,一個(gè)簡(jiǎn)單的Windows服務(wù)就創(chuàng)建完成了。

安裝卸載Windows服務(wù)

我們直接運(yùn)行剛剛創(chuàng)建的服務(wù),發(fā)現(xiàn)是無法運(yùn)行的,提示使用installutil.exe來運(yùn)行。

如果安裝了VS,這個(gè)exe應(yīng)用程序在C盤里可以找到的,具體路徑為:C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe

接下來,我們使用這個(gè)exe來進(jìn)行安裝和卸載Windows服務(wù)。

1、首先,使用管理員權(quán)限打開CMD,然后進(jìn)入這個(gè)路徑下,便于直接操作InstallUtil。

2、安裝服務(wù)命令:installutil  exe絕對(duì)路徑 ;卸載服務(wù)命令:installutil  exe絕對(duì)路徑 -u ;查看安裝執(zhí)行結(jié)果:

打開服務(wù),可以看到TestService這個(gè)名稱的服務(wù)已經(jīng)安裝完成,

3、安裝完成后,雙擊打開,可以啟動(dòng)服務(wù):

4、也可以手動(dòng)停止服務(wù):

5、觀察D盤文件,是否存在信息:

6、卸載服務(wù)結(jié)果:

到此這篇關(guān)于基于C#實(shí)現(xiàn)Windows服務(wù)的方法詳解的文章就介紹到這了,更多相關(guān)C# Windows服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#檢查foreach判讀是否為null的方法

    C#檢查foreach判讀是否為null的方法

    這篇文章主要介紹了C#如何檢查foreach判讀其是否為null,文中給出了示例代碼,介紹的很詳細(xì),需要的朋友可以參考下方法
    2016-09-09
  • C#字符串中去除多余的空格保留一個(gè)的實(shí)例

    C#字符串中去除多余的空格保留一個(gè)的實(shí)例

    下面小編就為大家分享一篇C#字符串中去除多余的空格保留一個(gè)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Unity實(shí)現(xiàn)植物識(shí)別示例詳解

    Unity實(shí)現(xiàn)植物識(shí)別示例詳解

    這篇文章主要介紹了如何通過Unity接入百度AI實(shí)現(xiàn)植物識(shí)別,接口返回植物的名稱,并支持獲取識(shí)別結(jié)果對(duì)應(yīng)的百科信息。感興趣的可以了解一下
    2022-01-01
  • C#獲取日期的星期名稱實(shí)例代碼

    C#獲取日期的星期名稱實(shí)例代碼

    本文通過實(shí)例代碼給大家介紹了基于c#獲取日期的星期名稱,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-08-08
  • C#軟件注冊(cè)碼的實(shí)現(xiàn)代碼

    C#軟件注冊(cè)碼的實(shí)現(xiàn)代碼

    開發(fā)軟件時(shí),當(dāng)用到商業(yè)用途時(shí),注冊(cè)碼與激活碼就顯得很重要了,現(xiàn)在的軟件技術(shù)實(shí)在在強(qiáng)了,各種國(guó)內(nèi)外大型軟件都有注冊(cè)機(jī)制,但我們學(xué)習(xí)的是技術(shù)
    2013-05-05
  • unity實(shí)現(xiàn)手游虛擬搖桿

    unity實(shí)現(xiàn)手游虛擬搖桿

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)手游虛擬搖桿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C# 刪除數(shù)組內(nèi)的某個(gè)值、一組值方法詳解

    C# 刪除數(shù)組內(nèi)的某個(gè)值、一組值方法詳解

    在本篇文章里小編給大家整理的是關(guān)于C# 如何刪除數(shù)組內(nèi)的某個(gè)值、一組值的相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2020-03-03
  • C#操作XML文件實(shí)例匯總

    C#操作XML文件實(shí)例匯總

    這篇文章主要介紹了C#操作xml文件實(shí)例,包括了對(duì)XML文件節(jié)點(diǎn)的查找、遍歷、刪除、添加等。是C#程序設(shè)計(jì)中非常重要的技巧,需要的朋友可以參考下
    2014-08-08
  • 遞歸案例分享

    遞歸案例分享

    一般定義:程序調(diào)用自身的編程技巧稱為遞歸( recursion)。
    2014-05-05
  • C# wpf使用ffmpeg命令行實(shí)現(xiàn)錄屏的示例代碼

    C# wpf使用ffmpeg命令行實(shí)現(xiàn)錄屏的示例代碼

    本文主要介紹了C# wpf使用ffmpeg命令行實(shí)現(xiàn)錄屏的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評(píng)論