根据我是以独立模式启动应用程序还是作为一项服务安装,我在Top大陆架上看到了不同的行为。我试过Top大陆架3.3.1和4.1。
我正在使用一个实现ServiceControl的服务,它在独立模式下工作良好。在尝试启动已安装的服务时,我会收到一条消息,即该服务响应控制请求花费的时间太长。
var resultCode = HostFactory.Run(x =>
{
x.Service<ServiceControl>(sc =>
{
sc.ConstructUsing(() =>
{
Console.WriteLine("GET INSTANCE!");
return new WorkerService();
});
sc.WhenStarted((s, h) =>
{
Console.WriteLine("START!");
return s.Start(h);
});
sc.WhenStopped((s, h) =>
{
Console.WriteLine("STOP!");
return s.Stop(h);
});
sc.BeforeStartingService(() => Console.WriteLine("BEFORE START!"));
});
x.SetDescription("WorkerService");
x.SetDisplayName("WorkerService");
x.SetServiceName("WorkerService");
});这是一个非常冗长的调用服务版本(包含大量控制台输出),但是即使对ConstructUsing或BeforeStartingService的调用也不会产生任何控制台输出,而Service<> lambda中的日志调用也会产生输出。
我在这里不太清楚,但也无法用最少的样本来重现。超时发生在大约3-4秒之后,没有任何明显的尝试来启动服务。从程序main启动服务线程是毫无例外的。
使用WorkerService.exe启动服务就像预期的那样,使用WorkerService.exe start (启动服务)启动服务不起作用。
由于这发生在Top大陆架3和4中,它很可能是我在应用程序中做错的事情。任何指向正确方向的指针都是非常感谢的。
发布于 2018-10-30 12:46:57
我现在有了一个线索:作为加载配置的一部分,我们将从漫游的AppData加载一个文件,看起来如果无法访问该文件,就会抛出一个异常并悄悄丢弃。如果该文件不存在,则服务按预期启动,一切正常工作。
因此,最基本的问题是,在Top大陆架服务配置部分启动之前抛出了一个未察觉的异常,该异常似乎用于在使用start参数调用exe时将一些输出转发给命令行应用程序。
在时间允许的情况下,我将尝试对此进行调查,并以学习的方式为Top大陆架做出贡献。
发布于 2018-10-29 16:19:31
你注册WorkerService为ServiceControl了吗?如果没有,请注册服务。(您使用Autofac吗?)如果没有,试着提供
x.Service<WorkerService>(sc => // Your code而不是ServiceControl
发布于 2021-09-20 12:38:41
尝试在cmd中注册服务(具有管理权限):
安装:yourApplication.exe install
“统一”:yourApplication.exe uninstall
https://stackoverflow.com/questions/53049031
复制相似问题