【问题标题】:Service- how to catch exit code服务 - 如何捕获退出代码
【发布时间】:2011-10-30 20:35:39
【问题描述】:

我想询问有关 Windows 服务的问题。 我的服务代码如下所示:

try
{
  //...
}
catch
{
  Environment.ExitCode = 1;
}

安装服务后,我使用调度系统在特定时间运行服务:

net start MyService
//or
sc start MyService

所以我的问题是,如果我有异常,如何获取信息? 是否有任何命令可以获取此信息?现在我通常运行我的应用程序,然后在 10 分钟后运行。停止服务。我想做中间调度任务,它会告诉我是否在应用程序中发生了错误。我已经尝试了“sc”的所有选项 - 但它只提供有关服务的信息。

约束:

  • 我无法将错误和异常记录到事件日志或文件中
  • 不想更改我的代码
  • 在调度系统中,我可以使用 bat 脚本(所以这个 scipt 是我唯一可以更改的地方)

【问题讨论】:

  • 我认为这里要考虑的问题是为什么要将程序作为 Windows 服务而不是独立的可执行文件来执行。我认为没有任何方法可以获取作为服务运行的进程的退出代码,因为您的服务正在由服务控制管理器运行。如果您只是按需运行进程,由调度程序驱动,请考虑仅使用独立的可执行文件。

标签: c# service scheduling


【解决方案1】:

标准方法是将错误和异常记录到event log - 可以是您为服务创建的特定错误和异常,或者只是将服务用作事件日志的新源。

您可以使用 WMI 然后定期检查事件日志是否有错误。

【讨论】:

  • WMI 是一个很好的解决方案,但我做不到。我想在我的调度系统中拥有一切。而且我无法创建事件日志。我需要从服务中获取异常代码,例如从 winform 应用程序中获取。
  • @user1021060 - 您能否更新您的问题并解释您的限制条件?据我所知,写入事件日志应该没有问题。
  • @user1021060 - 以及任何 other 约束。我可以告诉你写一个文件,然后你告诉我这也不好。或者使用 tcp 套接字。或者共享内存。您需要解释所有约束。
【解决方案2】:

在无法登录事件日志的情况下,能否创建自己的“事件日志”?使用中间服务定期轮询的文件或数据库表可能会达到您的目的。

【讨论】:

  • 我已经更新了我对这个问题的约束。我无法创建自己的事件日志、文件或数据库。
猜你喜欢
  • 2017-01-21
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 2012-08-29
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多