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


創(chuàng)建成功后的目錄結構如左側所示,至此項目構建完成。

配置相關信息
添加安裝程序



重新生成一下解決方案

至此配置完成。
腳本可執(zhí)行文件
在工程目錄的bin\Debug目錄下 新建兩個腳本文件–install.bat和uninstall.bat,分別用于安裝服務和卸載服務。

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í)行安裝腳本文件

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


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

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

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


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

記得在App.config中設置鍵值對 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 這里可以自行設置
public string filePath = ConfigurationManager.AppSettings["FilePath"];
//主要功能代碼在這里寫
protected override void OnStart(string[] args)
{
//日志記錄方法
WriteLog(filePath, "啟動服務。");
InitTimer();//初始化的定時器
}
protected override void OnStop()
{
//停止服務
WriteLog(filePath , "停止服務。");
}
public void InitTimer()
{
//設置定時器兩秒執(zhí)行一次
ServiceTimer = new System.Timers.Timer(2000);
//執(zhí)行的操作為Excute
ServiceTimer.Elapsed += Excute;
//是否重復執(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
{
//關閉流 釋放資源
if (writer != null)
{
writer.Close();
writer.Dispose();
}
}
}
}
}
執(zhí)行結果

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

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



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

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

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

到此這篇關于VS2022創(chuàng)建Windows服務程序的方法步驟的文章就介紹到這了,更多相關VS2022創(chuàng)建Windows服務程序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- VS2022?安裝.NET4.5目標包的方法
- VS2022遠程調(diào)試工具的使用方法
- VS2022實現(xiàn)VC++打包生成安裝文件圖文詳細歷程
- 使用VS2022在ASP.NET?Core中構建輕量級服務
- 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)步驟
相關文章
C語言中十六進制轉(zhuǎn)十進制兩種實現(xiàn)方法
這篇文章主要介紹了C語言中十六進制轉(zhuǎn)十進制兩種實現(xiàn)方法的相關資料,需要的朋友可以參考下2017-01-01
C++ Qt開發(fā)之使用QHostInfo查詢主機地址
Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,本文將重點介紹如何運用QHostInfo組件實現(xiàn)對主機地址查詢功能,希望對大家有所幫助2024-03-03
C++兩個cpp文件間如何進行各自函數(shù)的調(diào)用方式
這篇文章主要介紹了C++兩個cpp文件間如何進行各自函數(shù)的調(diào)用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
關于VS2019 C++項目同時出現(xiàn)LNK2005 和LNK1169 error 的解決辦法
這篇文章主要介紹了關于VS2019 C++項目同時出現(xiàn)LNK2005 和LNK1169 error 的解決辦法,本文給大家介紹的非常詳細,對大家的學習工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
C++利用Socket實現(xiàn)主機間的UDP/TCP通信
這篇文章主要為大家詳細介紹了C++如何利用Socket實現(xiàn)主機間的UDP/TCP通信功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-01-01

