有没有人在构建Windows服务时使用过TopShelf?我在尝试启动服务时一直遇到这个错误,“尚未安装Topshelf.HostConfigurators.WindowsServiceDescription服务。”构建、安装程序、安装以及所有这些步骤都已完成,该服务出现在WindowsServer的服务列表中,但是当我单击该服务并尝试启动它时,会抛出此异常。完整的错误消息如下所示。信息10:23:08作为winservice应用程序启动FATAL10:23:08Topshelf.HostConfigurators.WindowsServiceDescription服务尚未安装。请运行
标题说明了一切。我在他们的文档或网络上找不到任何满足我需求的东西。 最佳答案 不是真的。通过服务中的服务管理器执行此操作将使您处于糟糕的状态,因为该服务不会正确关闭,或者它会在没有任何进程运行的情况下启动备份。这个限制并不是真正的Topshelf限制。您可以使用恢复选项并设置一个计时器,按给定的时间表退出进程;这有点奇怪,但我相信人们现在正在这样做。最后,您可以创建一个与服务管理器交互的监控服务或作业,调用重启。 关于c#-有没有一种优雅的方式可以每天、每晚或按计划重启Topshelf服
我正在尝试使用Topshelf和Serilog(分别是Serilog.Extras.Topshelf包)为我的Windows服务设置一个简单的日志记录配置。HostLogger.UseLogger(newSerilogHostLoggerConfigurator(newLoggerConfiguration().WriteTo.RollingFile(AppDomain.CurrentDomain.BaseDirectory+"\\logs\\app-{Date}.log").WriteTo.ColoredConsole().MinimumLevel.Debug().CreateLog
TopShelf创建Windows服务安装NuGet包TopShelf如图1-1所示,先安装TopShelf的NuGet包;图1-1创建服务类如图1-2所示,创建一个ServiceManager服务类,并创建了两个方法,分别为Start和Stop方法,分别在服务启动和停止时调用;图2-1使用TopShelf创建服务如图3-1所示,在Program.cs文件中对服务进行配置;图3-1调用开始如图3-2所示,WhenStarted是指在服务启动时应该调用Start方法的意思;图3-2调用停止如图3-3所示,WhenStopped是指在服务停止时应该调用Stop方法的意思;图3-3异常处理如图3-4
我有一个用作TCP服务器的TopshelfWindows服务。在此服务中,我还有一个自托管(OWIN)WebAPI。我的目标是以某种方式允许WebAPI与同一服务中包含和运行的TCP服务器进行通信。自然地,我可以简单地使用诸如“触发器”文件或共享数据库之类的东西可以经常进行轮询,但我想知道实现此目的的任何更优化/native方法。为了更好地了解该项目,请考虑使用我的API并使用任意字符串参数进行某些调用的单页应用程序。然后应将此数据传递给连接到正在运行的TCP服务器的客户端(使用winsock的C++控制台应用程序)。以下容器被实例化并传递给TopshelfHostConfigurat
我有一个topshelfwindows服务,我想在其中进行一些检查(即xml文件是否存在),如果检查失败,我需要停止windows服务。所以我尝试在Start()方法中进行检查,然后引发异常:publicvoidStart(){if(!File.Exists(_xmlFile)thrownewFileNotFoundException();//Dosomeworkhereifxmlfileexists.}但是,Windows服务在发生异常后仍然作为一个进程存在,然后我必须在任务管理器中手动终止该异常。有没有办法在满足某些条件(即未找到文件)时不运行该服务?
我有一个topshelfwindows服务,我想在其中进行一些检查(即xml文件是否存在),如果检查失败,我需要停止windows服务。所以我尝试在Start()方法中进行检查,然后引发异常:publicvoidStart(){if(!File.Exists(_xmlFile)thrownewFileNotFoundException();//Dosomeworkhereifxmlfileexists.}但是,Windows服务在发生异常后仍然作为一个进程存在,然后我必须在任务管理器中手动终止该异常。有没有办法在满足某些条件(即未找到文件)时不运行该服务?
我目前正在使用带有控制台应用程序的TopShelf创建Windows服务。当我将代码作为控制台应用程序运行时,我使用一些Console.WriteLine()来输出结果。一旦代码完成了它应该做的事情,我就将控制台应用程序安装为Windows服务。即使Windows服务无法写入控制台,保留Console.WriteLine()代码是否有任何缺点?如果我将Console.WriteLine()留在其中,是否存在代码不稳定的风险? 最佳答案 Theoutputwillsimplybediscarded.InaWindowsServicet
我目前正在使用带有控制台应用程序的TopShelf创建Windows服务。当我将代码作为控制台应用程序运行时,我使用一些Console.WriteLine()来输出结果。一旦代码完成了它应该做的事情,我就将控制台应用程序安装为Windows服务。即使Windows服务无法写入控制台,保留Console.WriteLine()代码是否有任何缺点?如果我将Console.WriteLine()留在其中,是否存在代码不稳定的风险? 最佳答案 Theoutputwillsimplybediscarded.InaWindowsServicet
我正在尝试使用Topshelf将控制台应用程序托管为Windows服务,但我遇到了问题...我已经从我的控制台应用程序中引用了Topshelfdll以及log4netdll。但是,当我编译时——无论是否使用引用Topshelf的代码,都会显示标题中提到的构建错误,然后我的Topshelf引用变得无效(以及log4net)。我觉得我遗漏了一些明显的东西-任何建议都将不胜感激。 最佳答案 将项目更改为面向.NET4.0而不是.NET4.0ClientProfile。Topshelf引用System.Web作为进程内仪表板。