我有一个控制台.NET应用程序,它既可以从控制台运行,也可以作为Windows服务运行(在注册后)。该过程正在使用Topshelf .NET库。
在这两种情况下,入口点都是相同的 - Program.Main,但命令行参数是不同的。但是,我不想根据命令行参数做出决定。
这是Main使用的Topshelf代码:
var exitCode = HostFactory.Run(configurator =>
{
configurator.UseNLog();
configurator.RunAsLocalSystem();
configurator.SetServiceName(Cfg.ServiceName);
configurator.SetDescription(serviceDescription);
configurator.SetDisplayName(serviceDisplayName);
configurator.EnablePauseAndContinue();
configurator.Service(factory =>
{
var bjeServer = DependencyResolver.Instance.GetInstance<IBJEServer>();
bjeServer.Initialize();
return (ServiceControl)bjeServer;
});
});
if (exitCode != TopshelfExitCode.Ok)
{
Environment.Exit(1);
}
// This may actually not terminate the process right away. The reason - Quartz may still be waiting for jobs to finish, which may take hours.
return 0;
如果解决方案是Topshelf特定的,我很好。一般的欢迎。