即使有类似的问题,我也找不到解决我的问题的方法。我有一个作为服务运行的简单程序,我想以编程方式启动它。就这么简单:
private static void StartService()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MyService()
};
ServiceBase.Run(ServicesToRun);
}
不出所料,我不能不安装就启动我的服务。 Windows给我以下错误消息:
无法从命令行或调试器启动服务。必须先使用installutil.exe安装Windows服务,然后再使用服务浏览器,Windows服务管理工具或NET启动来启动Windows服务。
到目前为止,一切都很好。所以我去了那里,就像the docs所说的那样:
installutil <my_project>.exe
安装成功,我什至可以从Service Manager或net start
启动服务。唯一的问题是:当我调试应用程序(通过F5)时,Windows始终向我显示完全相同的消息:Cannot start service (...)
。
我找到了使用此解决方案的here:
public void onDebug()
{
OnStart(null);
}
这允许我正常运行和调试应用程序,但实际上我需要将其作为服务运行,而Windows拒绝以这种方式启动。我有什么想念的吗?
答案 0 :(得分:0)
像正常程序一样启动服务不是您的权力。服务必须在服务管理员中注册并由其启动。这是Windows服务的(许多)规则之一。而且您必须为每个新版本重复一次。
由于此规则和其他与服务相关的规则(没有交互式会话)可能会使他们感到痛苦,因此一种常见的方法是使用控制台应用程序进行开发。我找不到理想的例子,但发现了类似的东西: https://alastaircrabtree.com/how-to-run-a-dotnet-windows-service-as-a-console-app/
当然,更好的长期计划可能是停止一起使用服务,然后切换到Windows Task Scheduler。这在很大程度上取决于您实际上需要什么代码才能在实践中完成。