C# Windows 服务无法启动:"Cannot start service from command line or debugger"



即使有类似的问题,我也找不到任何解决我的问题。我有一个简单的程序,可以作为服务运行,我想从编程中启动它。这很简单:

private static void StartService()
{
    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[]
    {
        new MyService()
    };
    ServiceBase.Run(ServicesToRun);
}

正如预期的那样,我不能只安装服务就可以启动我的服务。Windows给我以下错误消息:

无法从命令行或调试器启动服务。Windows Service必须首先使用installutil.exe安装,然后从Service Explorer,Windows Services管理工具或Net Starts开始。

到目前为止一切都很好。所以我去了那里,就像文档所说的那样:

installutil <my_project>.exe

安装成功,我甚至可以从服务管理器或net start启动我的服务。唯一的问题是:当我调试应用程序(通过F5(时,Windows不断向我显示完全相同的消息:Cannot start service (...)

我在这里找到了一种解决方案:

public void onDebug()
{
    OnStart(null);
}

使我可以正常运行和调试我的应用程序,但是我实际上需要它作为服务运行,Windows拒绝以这种方式启动。我缺少什么吗?

只能像普通程序一样启动服务。该服务必须由服务经理注册并启动。这是Windows服务的(许多(规则之一。您必须对每个新版本重复此操作。

由于此和其他服务相关的规则(没有交互式会话(可以使它们变得痛苦,因此一种常见的方法是使用控制台应用程序开发它们。我找不到理想的例子,但是我发现了类似的东西:https://alastaircrabtree.com/how-to-run-a-dotnet-windows-service-as-a-a-console-app/

当然,一个更好的长期计划可能是停止使用Alltoderth的服务,然后切换到Windows Task Scheduler。这在很大程度上取决于您确切需要该代码才能实践。

最新更新