【问题标题】:Exe stopped suddenly when calling from windows service从 Windows 服务调用时,exe 突然停止
【发布时间】:2015-07-15 13:55:19
【问题描述】:

我已经编写了一个 Windows 服务,我正在从这个 Windows 服务调用我的一个 exe。

新的 exe 启动成功,蚂蚁在 2-3 秒内停止。

谁能推荐一下?

【问题讨论】:

  • 在应用程序中输入一些日志,看看有什么问题!
  • 新的 exe 运行成功。它在任务管理器中显示几秒钟。但它会自动停止。
  • 为您的问题添加更多信息。
  • 我们正在从 Windows 服务调用我的一个 exe,比如 blah.exe,我使用 Process 来启动它。当服务启动时,它会在服务器上启动该 exe 并仅执行几秒钟,而不是完成过程。如果我直接从文件系统运行 exe,它工作正常,只有当我从 Windows 服务启动它时才会遇到问题。

标签: c#


【解决方案1】:

Microsoft 不支持通过 Process.Start() 从 Windows 服务启动应用程序。它有时可以工作,但正如您所见,它并不可靠。 Process.Start() 旨在从“交互式”进程启动应用程序,而服务被视为“批处理”进程。

要从服务启动应用程序,您需要使用 Win32 API 调用。可以在this answer 中找到可以执行此操作的代码示例。 This answer 也可能提供一些有用的信息。

【讨论】:

  • 嗯,这不是很精确!我们成功地从 Windows 服务运行无头应用程序(带有隐藏控制台窗口的控制台应用程序)。您的意思是不再支持 GUI 交互。
  • @ThorstenDittmar,因为在评论中重新发布太长,请点击第一个链接答案的链接 - 它提供了 Microsoft 支持工程师曾经给我的关于此主题的信息。
  • 我认为您没有强调的 Microsoft 引用中的重要部分是指定凭据时。如果您不这样做,则该进程将仅在运行该服务的同一用户下运行。正如我所说,对于 Vista 之前存在的“桌面交互”选项,您的答案是正确的。自 Vista 以来,您无法从 Windows 服务运行桌面交互式应用程序。您的答案不完整,因为它没有提到您可以运行非交互式简单控制台应用程序。您甚至可以使用输入/输出流来控制它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多