为什么这项服务不会开始

时间:2013-06-20 20:38:12

标签: c# windows service

我有一个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.

在任何一种情况下 - 我都无法提出为什么会出现这种情况的正当理由。任何建议都会很棒。

2 个答案:

答案 0 :(得分: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();
    }
}

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

答案 1 :(得分:0)

显然我的安装程序出现了问题。在关闭,开启,关闭,向内和其他所有方向翻转选项之后,我以某种方式破坏了MSI,并且不得不重建它。完全擦除原始安装程序项目和新构建成功安装了该服务。这是Advanced Installer 9.3中的一个问题

感谢。