我创建了我的应用程序,它运行良好。我在
Program.cs
注册了一项服务:
using Microsoft.Extensions.Hosting.WindowsServices;
var options = new WebApplicationOptions
{
Args = args,
ContentRootPath = WindowsServiceHelpers.IsWindowsService()
? AppContext.BaseDirectory : default
};
var builder = WebApplication.CreateBuilder(options);
...
builder.Services.AddWindowsService();
builder.Services.AddHostedService<MicroinvestIOService>();// this is the name of my service
这是
MicroinvestIOService
中的代码:
public class MicroinvestIOService : BackgroundService
{
public MicroinvestIOService(ILoggerFactory loggerFactory)
{
Logger = loggerFactory.CreateLogger<MicroinvestIOService>();
}
public ILogger Logger { get; }
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
Logger.LogInformation("MicroinvestIOService is starting.");
stoppingToken.Register(() => Logger.LogInformation("ServiceA is stopping."));
while (!stoppingToken.IsCancellationRequested)
{
Logger.LogInformation("MicroinvestIOService is doing background work.");
await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
}
Logger.LogInformation("ServiceA has stopped.");
}
}
然后我向 CMD 注册了我的服务
sc create MicroinvestIO binpath="the path of my exe file"
但是:当启动我的服务的帐户是我当前的电脑管理员时,一切正常。
当我尝试使用“本地系统”帐户运行它时,它可能会在 5 或 10 秒后停止。
我什至尝试创建另一个管理员帐户,但又失败了!
有什么想法吗?
编辑: 我删除了这个: builder.Services.AddHostedService(); 结果是一样的。
所以,我做到了!拉尔夫,你说得完全正确!如果没有证书,我的 appsettings.json 中描述的 https 重定向端点将无法工作。我有两个选择:
要删除 https 端点:
“红隼”:{ “端点”:{ “http”:{ “网址”:“http://0.0.0.0:5000” }
或 2. 要使用命令“dotnet dev-certs https --trust”为 ASP.NET 生成证书,然后将证书导出到我的工作文件夹中并在 appsettings.json 中进行描述:
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://0.0.0.0:5000"
},
"Https": {
"Url": "https://localhost:5001",
"Certificate": {
"Path": "D:\\Temp\\MicroinvestIO\\Certificate.pfx",
"Password": "my password" - used when exporting certificate
}
}
}