.net-core - 将 NET Core 服务作为“网络服务”运行
问题描述
尝试将 .NET Core 服务启动为“NT Authority\NetworkService”或“NT Authority\LocalService”时,出现错误“服务未及时响应启动或控制请求”(1053)。但它可以作为“NT Authority\System”正常工作。
这是我尝试运行的服务的完整代码(用于测试目的):
using System.ServiceProcess;
namespace ConsoleApp1
{
public class Program
{
public static void Main(string[] args)
{
ServiceBase.Run(new ServiceBase());
}
}
}
和 csproj 文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.ServiceProcess.ServiceController" Version="4.7.0" />
</ItemGroup>
</Project>
构建项目后,我将文件复制到另一个具有服务帐户权限的文件夹(以防止出现错误 5:访问被拒绝)。
作为系统运行:
$ sc create ConsoleApp1 binPath= "c:\Test\ConsoleApp1.exe" obj= "NT Authority\System"
[SC] CreateService ÊXITO
$ sc start ConsoleApp1
NOME_DO_SERVIÇO: ConsoleApp1
TIPO : 10 WIN32_OWN_PROCESS
ESTADO : 2 START_PENDING
(NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
CÓDIGO_DE_SAÍDA_DO_WIN32 : 0 (0x0)
CÓDIGO_DE_SAÍDA_DO_SERVIÇO : 0 (0x0)
PONTO_DE_VERIFICAÇÃO : 0x0
AGUARDAR_DICA : 0x7d0
PID : 11288
SINALIZADORES :
$
作为网络服务运行:
$ sc create ConsoleApp1 binPath= "c:\Test\ConsoleApp1.exe" obj= "NT Authority\NetworkService"
[SC] CreateService ÊXITO
$ sc start ConsoleApp1
[SC] StartService FALHA 1053:
O serviço não respondeu à requisição de início ou controle em tempo hábil.
$
服务没有及时响应启动或控制请求
将此帐户添加到“管理员”组后,我能够使其作为“网络服务”工作,但我不会在生产服务器中这样做。
解决方案
问题的发生是由于缺少不属于 NET Core 运行时的引用程序集,我通过在控制台中运行可执行文件而不是将其作为服务启动来发现这一点。不幸的是,Windows 服务控制器无法记录这些错误。
vs2017 无法使用“Microsoft.NET.Sdk”模板发布 NET Core 控制台项目,所以我切换到“Microsoft.NET.Sdk.Web”并发布,然后将所有需要的程序集复制到目标文件夹。
vs2017 已经将这些程序集自动复制到 NET Core 3.1 的 bin 文件夹中,但不适用于 NET Core 2.2。
推荐阅读
- java - 我们如何在下拉列表中使用带括号的元素的正则表达式,并且在重新加载后下拉输入文本没有括号
- android - Camera2 API OIS 问题
- dpdk - collectd 中的 dpdkstats 插件
- c# - 如何在 .NET 核心中的设备中在一个时间跨度内只缓存一次内容?
- java - 银行数据库:正确定义关系?
- django - 搜索功能上的 Pagiantor
- javascript - 反应原生视频全屏控制
- arrays - 为什么我会收到错误“‘等级’中缺少大小。当行显然不需要声明时?
- c++ - Guaranteed locales on different platforms
- java - Sun PKCS11 库 C_Encrypt 和 C_Decrypt 更改