【发布时间】:2026-01-09 09:25:02
【问题描述】:
我正在编写一个 C# Windows 服务来管理两个系统服务,这将有助于防止 Microsoft 将 W10AU(周年更新)升级到 W10CU(创作者更新)。最近微软“犯了一个错误”并强制从 v1607 更新到 v17xx,即使用户有计量连接并且已禁用、延迟或阻止更新。
我首先根据教程编写了一个简单的 C# 服务“CronService”。我有它的工作,但希望能够在 VS2017 中调试。我之前通过加载 DLL、在代码中设置断点然后执行“使用调试运行”来调试 DLL。这更难。
这并不像看起来那么容易!如果您按照上述说明进行操作,您会发现所有断点都被禁用“断点不会被命中。符号未加载。”如果你进一步看,你会发现你必须通过编写另一个虚拟服务来跳过箍??
Easier way to debug a Windows service
按照对我有用的建议之一。而不是
public static void Main() {
ServiceBase.Run(new CronService());
}
您将 Main() 编码为
public static void Main() {
if (Environment.UserInteractive) {
RunInteractive(new CronService());
} else {
ServiceBase.Run(new CronService());
}
}
然后添加一个函数 RunInteractive() ,您可以从上面的链接中获得它。此方法使用反射来调用 OnStart() 和 OnStop()。
您仍然需要以正常方式编译、安装和启动服务。要调试,请按照下列步骤操作:-
在 VS2017 中打开项目
-
从 cmd 行启动 cron.exe;该服务应该正在运行
cmd窗口会提示“按任意键停止服务”
-
设置断点;他们没有被禁用!
你甚至可以在 OnStart() 和 OnStop() 中设置断点
-
[>] 从调试开始
断点会被命中!
在 cmd 窗口中按任意键停止调试
【问题讨论】:
-
这里有实际问题吗?