










using System; using System.IO; using System.ServiceProcess; using System.Threading; using System.Threading.Tasks; namespace MyDelayService { public partial class DelayTaskService : ServiceBase { private Task _mainTask; private CancellationTokenSource _cts; //private readonly string _logPath; public DelayTaskService() { InitializeComponent(); ServiceName = "My4HourDelayService"; // 日志文件路径:exe所在目录\Log\yyyy-MM-dd.log //_logPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log"); //if (!Directory.Exists(_logPath)) // Directory.CreateDirectory(_logPath); } // 服务启动 protected override void OnStart(string[] args) { WriteLog("服务已启动"); _cts = new CancellationTokenSource(); _mainTask = RunLoopTaskAsync(_cts.Token); } // 服务停止 protected override void OnStop() { WriteLog("服务正在停止..."); _cts?.Cancel(); _mainTask?.Wait(); WriteLog("服务已停止"); } /// <summary> /// 循环任务:每隔指定时间执行一次 /// </summary> private async Task RunLoopTaskAsync(CancellationToken token) { try { while (!token.IsCancellationRequested) { WriteLog("开始执行任务"); // ========== 执行你的业务 ========== DoYourWork(); // ========== 等待后再次执行 ========== // 5分钟:5 * 60 * 1000 // 4小时:4 * 60 * 60 * 1000 var waitTime = 5 * 60 * 1000; WriteLog($"任务执行完成,等待 {waitTime / 60000} 分钟后再次执行"); await Task.Delay(waitTime, token); } } catch (TaskCanceledException) { WriteLog("循环任务已取消(正常停止)"); } catch (Exception ex) { WriteLog($"循环任务异常:{ex.Message}"); } } /// <summary> /// 你的业务逻辑 /// </summary> private void DoYourWork() { try { // 在这里写你要执行的代码 WriteLog("业务逻辑执行成功!"); } catch (Exception ex) { WriteLog($"业务执行失败:{ex.Message}"); } } /// <summary> /// 写入日志文件 /// </summary> public void WriteLog(string msg) { try { XLog.XTrace.WriteLine(msg); } catch { } } } }
比如 Service1.cs 或 MyDelayService.cs(双击打开)
✅ 完成后,项目会自动生成两个文件:
ProjectInstaller.cs(核心)
ServiceInstaller1ServiceProcessInstaller1双击打开 ProjectInstaller.cs,分别设置两个组件的属性:
serviceProcessInstaller1设置 Account = LocalSystem
(本地系统权限,最常用)
serviceInstaller1在 VS 里点击:
生成 → 重新生成解决方案
(中文叫:VS 2022 开发人员命令提示符)
cd D:\vs2022proj\MyDelayService\bin\Debug
installutil MyDelayService.exe
installutil /u MyDelayService.exe
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。