我有一个Windows服务,我有一些问题正在工作。
相关function如下:
(编辑以反映当前)
static void Main() { if (Debugger.IsAttached) { ContinuumService Service = new ContinuumService(); Service.Start(new Object[] { }); while (true) Thread.Sleep(1); } else { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new ContinuumService() }; ServiceBase.Run(ServicesToRun); } } public ContinuumService() { InitializeComponent(); } protected override void OnStart(string[] args) { base.OnStart(args); } protected override void OnStop() { base.OnStop(); }
我的安装程序设置为“允许服务与桌面交互”(因为我似乎无法得到没有这个服务安装),我知道该服务正在安装 – 但由于某种原因无法启动。
我的理解是服务启动命令将执行OnStart并等待该方法完成。 如果完成,如果进程仍在运行,服务报告正在运行…如果这是歪斜请让我知道。
我从安装程序返回的确切错误是'Service'[display name]'([name])无法启动。 validation您是否有足够的权限来启动系统服务。 并从安装程序后面生成的日志,我得到了一个错误1920与相同的消息。
无论哪种情况 – 我都不能拿出一个合理的理由来解释这种情况。 任何build议将是伟大的。
我相信你的问题既是循环又缺乏base.OnStart()和base.OnStop()调用。 您可以启动和停止没有循环的基本服务,并且将永久运行。 示例基本服务从字面上什么都不做:
public class ExampleService : ServiceBase { private static void Main() { ServiceBase.Run(new[] { new ExampleService() }); } public ExampleService() { // Name the Service ServiceName = "Example Service"; } protected override void OnStart(string[] args) { base.OnStart(args); // Does nothing } protected override void OnStop() { base.OnStop(); } }
尝试实现这一点,看看它的工作原理,并逐步增加你的逻辑和测试。
显然,在我的安装程序中有一个问题。 在将选项关闭,退出,退出,以及其他任何方向之后,我都以某种方式损坏了MSI,并且不得不重建它。 原始安装程序项目的全面擦除和新建版本成功安装了该服务。 这是Advanced Installer 9.3中的一个问题
谢谢。