亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

VS2022創(chuàng)建Windows服務(wù)程序的方法步驟

 更新時間:2022年05月19日 11:54:27   作者:三文魚先生  
本文主要介紹了VS2022創(chuàng)建Windows服務(wù)程序的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

創(chuàng)建一個Windows服務(wù)程序

可以創(chuàng)建Windows服務(wù)程序

打開VS2022,新建項目。

在這里插入圖片描述

在這里插入圖片描述

創(chuàng)建成功后的目錄結(jié)構(gòu)如左側(cè)所示,至此項目構(gòu)建完成。

在這里插入圖片描述

配置相關(guān)信息

添加安裝程序

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

重新生成一下解決方案

在這里插入圖片描述

至此配置完成。

腳本可執(zhí)行文件

在工程目錄的bin\Debug目錄下 新建兩個腳本文件–install.bat和uninstall.bat,分別用于安裝服務(wù)和卸載服務(wù)。

在這里插入圖片描述

install.bat

%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe %~dp0MyFirstWindowsService.exe
Net Start MyFirstService
sc config MyFirstService start=auto
pause

簡單說明

在這里插入圖片描述

uninstall.bat

%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /u %~dp0MyFirstWindowsService.exe
pause

至此配置完成。

執(zhí)行腳本文件

執(zhí)行安裝腳本文件

在這里插入圖片描述

可以右鍵我的電腦 -> 管理 找到服務(wù),在右側(cè)尋找我們自己的服務(wù)名稱

在這里插入圖片描述

在這里插入圖片描述

執(zhí)行卸載腳本文件

在這里插入圖片描述

如果不能創(chuàng)建Windows服務(wù)程序

如果輸入上述條件沒有找到可創(chuàng)建的工程,點擊安裝多個工具和功能。

在這里插入圖片描述

或者在某個工程的工具里點擊獲取工具和功能

在這里插入圖片描述

在這里插入圖片描述

等待安裝完畢,按上面的步驟來即可。

簡單地使用

使用本機服務(wù)和定時器Timer,簡單做一個WindowsService的記錄日志。

創(chuàng)建一個新的Windows服務(wù)

按照上述步驟創(chuàng)建一個新的Windows服務(wù),名為WindowsService2,并且服務(wù)名稱為WindowsService2。

我們主要的代碼在Service1.cs中寫,選中該文件,右鍵選擇查看代碼。

在這里插入圖片描述

記得在App.config中設(shè)置鍵值對 value是日志記錄地址 可自行選擇。

在這里插入圖片描述

主要代碼

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.IO;
using System.Configuration;

namespace WindowsService2
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }
        //創(chuàng)建定時器
        public System.Timers.Timer ServiceTimer;
        //從App.config中取值 這里我的日志文件位置在F:\log.txt 這里可以自行設(shè)置
        public string filePath = ConfigurationManager.AppSettings["FilePath"];
        //主要功能代碼在這里寫
        protected override void OnStart(string[] args)
        {
            //日志記錄方法
            WriteLog(filePath, "啟動服務(wù)。");
            InitTimer();//初始化的定時器
        }

        protected override void OnStop()
        {
            //停止服務(wù)
            WriteLog(filePath , "停止服務(wù)。");
        }

        public void InitTimer()
        {
            //設(shè)置定時器兩秒執(zhí)行一次
            ServiceTimer = new System.Timers.Timer(2000);
            //執(zhí)行的操作為Excute
            ServiceTimer.Elapsed += Excute; 
            //是否重復(fù)執(zhí)行
            ServiceTimer.AutoReset = true;
            //是否執(zhí)行Elapsed中的事件
            ServiceTimer.Enabled = true;
        }

        public void Excute(Object o , System.Timers.ElapsedEventArgs e)
        {
            //判斷是否執(zhí)行
            if (!File.Exists(filePath))
            {
                //不存再則創(chuàng)建
                File.Create(filePath);
            }
            //再這里寫入日志
            string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");         
            WriteLog(filePath, DateTime.Now.ToString(), "進行了操作。 日志文件路徑位于: " + filePath + " AppSetting : " + ConfigurationManager.AppSettings["FilePath"]);
        }
        //寫入日志文件
        public static void WriteLog(string path, params string[] s)
        {
            //創(chuàng)建輸入流
            System.IO.StreamWriter writer = null;
            try
            {
                writer = new System.IO.StreamWriter(path, true);
                StringBuilder sb = new StringBuilder("");
                for (int i = 0; i < s.Length; i++)
                {
                    sb.Append(" ");
                    sb.Append(s[i]);
                }
                writer.WriteLine(sb.ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            finally
            {
                //關(guān)閉流 釋放資源
                if (writer != null)
                {
                    writer.Close();
                    writer.Dispose();
                }
            }
        }
    }
}

執(zhí)行結(jié)果

在這里插入圖片描述

其他的問題

更改代碼后需要重新生成

每次更改執(zhí)行代碼后需要右鍵項目 -> 重新生成,否則更改不會生效。

在這里插入圖片描述

某些命名空間如無效需手動引入

以Configuration的命名空間舉例,即使加了using System.Configuration; 也有可能出現(xiàn)ConfigurationManager無法使用,這時我們可以手動引入。

找到工程右側(cè)引入,右鍵添加引用。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

腳本問題

編碼問題

創(chuàng)建bat文件時,有時候字符集編碼可能不對,導(dǎo)致腳本執(zhí)行時出現(xiàn)問題,我們可以用Notepad3打開,更改編碼格式為ANSI或者UTF-8。

在這里插入圖片描述

權(quán)限問題

執(zhí)行腳本文件時,需要右鍵以管理員身份運行,否則就會出現(xiàn)以下情況,導(dǎo)致服務(wù)安裝失敗。

在這里插入圖片描述

空格問題

如果腳本某些地方出現(xiàn)空格,會導(dǎo)致腳本運行失敗。
比如
在這里插入圖片描述

會導(dǎo)致以下報錯

在這里插入圖片描述

到此這篇關(guān)于VS2022創(chuàng)建Windows服務(wù)程序的方法步驟的文章就介紹到這了,更多相關(guān)VS2022創(chuàng)建Windows服務(wù)程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論