即使有类似的问题,我也找不到任何解决我的问题。我有一个简单的程序,可以作为服务运行,我想从编程中启动它。这很简单:
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。这在很大程度上取决于您确切需要该代码才能实践。