VS2022創(chuàng)建Windows服務(wù)程序的方法步驟
創(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)建的工程,點(diǎn)擊安裝多個工具和功能。

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


等待安裝完畢,按上面的步驟來即可。
簡單地使用
使用本機(jī)服務(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(), "進(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í)行代碼后需要右鍵項目 -> 重新生成,否則更改不會生效。

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



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

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

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

到此這篇關(guān)于VS2022創(chuàng)建Windows服務(wù)程序的方法步驟的文章就介紹到這了,更多相關(guān)VS2022創(chuàng)建Windows服務(wù)程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- VS2022?安裝.NET4.5目標(biāo)包的方法
- VS2022遠(yuǎn)程調(diào)試工具的使用方法
- VS2022實現(xiàn)VC++打包生成安裝文件圖文詳細(xì)歷程
- 使用VS2022在ASP.NET?Core中構(gòu)建輕量級服務(wù)
- VS2022永久配置OpenCV開發(fā)環(huán)境的實現(xiàn)
- Vs2022環(huán)境下安裝低版本.net framework的實現(xiàn)步驟
- 使用vs2022在.net6中調(diào)試帶typescript的靜態(tài)頁面
- 教你在VS2022?MFC程序中調(diào)用CUDA代碼的方法
- VS2022+unity3D開發(fā)環(huán)境搭建的實現(xiàn)步驟
相關(guān)文章
Qt圖形圖像開發(fā)曲線圖表模塊QChart庫縮放/平移詳細(xì)方法與實例
這篇文章主要介紹了Qt圖形圖像開發(fā)曲線圖表模塊QChart庫縮放/平移詳細(xì)方法與實例,需要的朋友可以參考下2020-03-03

