2

我有一个 Windows 服务,但在工作时遇到了一些问题。

相关功能如下:

(编辑以反映当前)

    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 并等待该方法完成。完成后,如果进程仍在运行,则服务报告正在运行...如果这有偏差,请告诉我。

我从安装程序返回的确切错误是'服务'[显示名称]'([名称])无法启动。验证您是否有足够的权限来启动系统服务。'; 从安装程序后面生成的日志中,我收到带有相同消息的错误 1920。

无论哪种情况——我都想不出一个正当的理由。任何建议都会很棒。

4

2 回答 2

1

我相信您的问题既是循环又是缺少 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();
    }
}

尝试实现它,看看它是否有效,然后逐步添加您的逻辑和测试。

于 2013-06-20T20:57:32.923 回答
0

显然我的安装程序有问题。在关闭、打开、后退、由内而外以及我能做到的所有其他方向之后,我不知何故损坏了 MSI,不得不重建它。完整擦除原始安装程序项目并重新构建成功安装了该服务。这是 Advanced Installer 9.3 中的一个问题

谢谢。

于 2013-06-20T21:53:58.990 回答