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