VS2022創(chuàng)建Windows服務(wù)程序的方法步驟
創(chuàng)建一個(gè)Windows服務(wù)程序
可以創(chuàng)建Windows服務(wù)程序
打開VS2022,新建項(xiàng)目。


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

配置相關(guān)信息
添加安裝程序



重新生成一下解決方案

至此配置完成。
腳本可執(zhí)行文件
在工程目錄的bin\Debug目錄下 新建兩個(gè)腳本文件–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
簡(jiǎn)單說明

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)建的工程,點(diǎn)擊安裝多個(gè)工具和功能。

或者在某個(gè)工程的工具里點(diǎn)擊獲取工具和功能


等待安裝完畢,按上面的步驟來即可。
簡(jiǎn)單地使用
使用本機(jī)服務(wù)和定時(shí)器Timer,簡(jiǎn)單做一個(gè)WindowsService的記錄日志。
創(chuàng)建一個(gè)新的Windows服務(wù)
按照上述步驟創(chuàng)建一個(gè)新的Windows服務(wù),名為WindowsService2,并且服務(wù)名稱為WindowsService2。
我們主要的代碼在Service1.cs中寫,選中該文件,右鍵選擇查看代碼。

記得在App.config中設(shè)置鍵值對(duì) 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)建定時(shí)器
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, "啟動(dòng)服務(wù)。");
InitTimer();//初始化的定時(shí)器
}
protected override void OnStop()
{
//停止服務(wù)
WriteLog(filePath , "停止服務(wù)。");
}
public void InitTimer()
{
//設(shè)置定時(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(), "進(jìn)行了操作。 日志文件路徑位于: " + 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í)行代碼后需要右鍵項(xiàng)目 -> 重新生成,否則更改不會(huì)生效。

某些命名空間如無效需手動(dòng)引入
以Configuration的命名空間舉例,即使加了using System.Configuration; 也有可能出現(xiàn)ConfigurationManager無法使用,這時(shí)我們可以手動(dòng)引入。
找到工程右側(cè)引入,右鍵添加引用。



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

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

空格問題
如果腳本某些地方出現(xiàn)空格,會(huì)導(dǎo)致腳本運(yùn)行失敗。
比如
會(huì)導(dǎo)致以下報(bào)錯(cuò)

到此這篇關(guān)于VS2022創(chuàng)建Windows服務(wù)程序的方法步驟的文章就介紹到這了,更多相關(guān)VS2022創(chuàng)建Windows服務(wù)程序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- VS2022?安裝.NET4.5目標(biāo)包的方法
- VS2022遠(yuǎn)程調(diào)試工具的使用方法
- VS2022實(shí)現(xiàn)VC++打包生成安裝文件圖文詳細(xì)歷程
- 使用VS2022在ASP.NET?Core中構(gòu)建輕量級(jí)服務(wù)
- VS2022永久配置OpenCV開發(fā)環(huán)境的實(shí)現(xiàn)
- Vs2022環(huán)境下安裝低版本.net framework的實(shí)現(xiàn)步驟
- 使用vs2022在.net6中調(diào)試帶typescript的靜態(tài)頁(yè)面
- 教你在VS2022?MFC程序中調(diào)用CUDA代碼的方法
- VS2022+unity3D開發(fā)環(huán)境搭建的實(shí)現(xiàn)步驟
相關(guān)文章
Qt圖形圖像開發(fā)曲線圖表模塊QChart庫(kù)縮放/平移詳細(xì)方法與實(shí)例
這篇文章主要介紹了Qt圖形圖像開發(fā)曲線圖表模塊QChart庫(kù)縮放/平移詳細(xì)方法與實(shí)例,需要的朋友可以參考下2020-03-03
C語(yǔ)言實(shí)現(xiàn)三子棋小游戲全程詳解
完成一個(gè)三子棋的代碼并不是很難,有困難且重要的是完成這個(gè)游戲代碼所具備的思想,因?yàn)樗枷肷系倪M(jìn)步才是真正的進(jìn)步,當(dāng)我們有了這個(gè)思想上的武器,寫出別的代碼,難度就不會(huì)高2022-05-05
C語(yǔ)言實(shí)現(xiàn)循環(huán)隊(duì)列
C++小知識(shí):復(fù)制粘貼代碼千萬(wàn)要小心

