我有一个简单的应用程序,它使用 topshelf 作为服务启动,它看起来很简单:
HostFactory.Run(x =>
{
x.Service<RequestService>();
x.RunAsLocalSystem();
});
嗯,它可以工作,但是在 Windows 下。当我在 Linux 下尝试这个时,我得到:
Topshelf.Runtime.Windows.WindowsHostEnvironment 错误:0:无法获取父进程(忽略),System.DllNotFoundException:无法加载共享库“kernel32.dll”或其依赖项之一。为了帮助诊断加载问题,请考虑设置 LD_DEBUG 环境变量:libkernel32.dll:无法打开共享对象文件:没有这样的文件或目录
有人遇到过这个问题吗?
我试图用谷歌搜索它,但有人说它有效,但它只是适用于 Windows 的工具。
或者.net core还有其他的服务提升框架吗?
Topshelf 并未宣传为跨平台,因此它不(或在撰写本文时没有)在非 Windows 环境中正式支持 .Net Core,即使它可以在其中运行(至少在撰写本文时,见下文)。
解决方案是在非 Windows 主机上运行时更改环境构建器。
这是我的项目的一个例子。创建服务时,根据主机操作系统在运行时选择环境构建器。
HostFactory.Run(c =>
{
// Change Topshelf's environment builder on non-Windows hosts:
if (
RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ||
RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
)
{
c.UseEnvironmentBuilder(
target => new DotNetCoreEnvironmentBuilder(target)
);
}
c.SetServiceName("SelloutReportingService");
c.SetDisplayName("Sellout Reporting Service");
c.SetDescription(
"A reporting service that does something...");
c.StartAutomatically();
c.RunAsNetworkService();
c.EnableServiceRecovery(
a => a.RestartService(TimeSpan.FromSeconds(60))
);
c.StartAutomatically();
c.Service<SelloutReportingService>();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)