必须使用.NET Framework的Windows Service模板创建服务项目,而非Worker Service;需配置Timer组件、安装程序并以管理员权限用InstallUtil.exe安装,最后通过services.msc启动。

创建Windows服务项目
要在Windows上运行一个长期后台任务且不依赖用户登录,必须通过Service Control Manager(SCM)注册为系统服务,不能用普通控制台程序伪装。
打开Visual Studio → 新建项目 → 在“C#”或“.NET”分类下选择【Windows Service (.NET Framework)】模板(注意:不是.NET Core/.NET 5+的“Worker Service”,后者需额外适配SCM)。
项目名称设为MyBackgroundService,点击创建。此时自动生成Service1.cs和Program.cs两个关键文件,设计器默认打开Service1.cs的设计视图——但这个视图是空的,因为Windows服务没有UI界面,双击它不会弹出窗体编辑器。
编写服务核心逻辑
双击Service1.cs,在OnStart方法内添加你的实际任务代码。例如写入事件日志并启动一个定时器:
在类顶部添加using System.Diagnostics;;在OnStart方法中写入:EventLog.WriteEntry("MyBackgroundService", "服务已启动", EventLogEntryType.Information);
拖拽工具箱中的Timer组件(必须是System.Timers.Timer,不是Windows.Forms.Timer)到Service1.cs设计表面。设置Interval = 30000(30秒),勾选Enabled = true,双击该Timer生成Elapsed事件处理方法,在其中写入日志记录语句。
【关键前提】若未在项目属性→应用程序→目标框架中明确选定.NET Framework 4.6.2或更高版本,编译会失败且错误提示极其模糊——务必确认此处不是.NET Core或.NET 5+。
添加安装程序并生成安装包
在Service1.cs设计视图空白处右键 → 选择“添加安装程序”。这将自动生成ProjectInstaller.cs及其两个组件:serviceProcessInstaller1(负责账户权限)和serviceInstaller1(负责服务名、描述等元数据)。
让 Windows 桌面程序在开机时静默自启并隐藏到系统托盘。特别适用于 Flutter、Electron 等无视 VBS/ProcessStartInfo 窗口样式、难以隐藏的顽固应用。提供「VBS 启动器 + Python ctypes/Win32 API」的隐藏窗口方案,可稳定把窗口收进托盘且不闪控制台。
选中serviceProcessInstaller1 → 在属性面板中将Account改为LocalSystem(拥有最高系统权限,适合大多数后台任务);
选中serviceInstaller1 → 修改ServiceName为MyBackgroundService(必须与服务实际运行名一致),Description填入“执行数据同步与日志归档”,DisplayName设为“我的后台服务”;
右键解决方案 → “重新生成解决方案”。生成成功后,进入bin\Debug(或Release)目录,确认存在MyBackgroundService.exe和MyBackgroundService.exe.config两个文件。
安装并启动服务
以管理员身份运行PowerShell或CMD,执行以下命令:
cd /d "D:\YourPath\bin\Debug"
InstallUtil.exe MyBackgroundService.exe
如果提示“InstallUtil.exe 未识别”,说明你没启用.NET Framework开发工具:打开“控制面板→程序→启用或关闭Windows功能→.NET Framework 4.8高级服务→勾选‘.NET Framework 4.8 SDK’”,重启后再试。
安装成功后,运行services.msc,在服务列表中找到“MyBackgroundService”,右键→启动。此时可在“Windows日志→应用程序”中筛选来源为“MyBackgroundService”的条目,验证日志是否持续写入。

















