有没有办法让.NET库检测它是否作为服务运行?
我的图书馆可以以任何方式运行.但是当它作为服务运行时,开发人员需要调用另一个方法来指示事实或某些功能无法正常工作.我希望我的库处理日志记录,如果在没有调用该方法的服务中使用它,则会写一个警告.
目前我正在通过以下方式检查它:
if (Environment.UserInteractive)
Application.Run(new ServiceControllerForm(service));
else
ServiceBase.Run(windowsService);
Run Code Online (Sandbox Code Playgroud)
它有助于调试一点,也可以使用可执行文件运行服务.但现在假设该服务需要与用户桌面进行交互,因此我必须在属性中启用"允许服务与桌面交互".这当然打破了这种检查方式.还有另外一种方法吗?
这个问题已在其他地方被问过SO,但没有迹象表明我如何得到一个如实例所示的实例HostControl.我的TopShelf主程序如下所示:
public static void Main()
{
HostFactory.Run(CreateHost);
}
private static void CreateHost(HostConfigurator x)
{
x.UseLog4Net();
x.Service<EventBroker>(s =>
{
s.ConstructUsing(name => new EventBroker());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.StartAutomatically();
x.RunAsNetworkService();
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?