【发布时间】:2021-10-30 22:45:57
【问题描述】:
我正在使用 c# Visual Studio 中的工作服务模板为 windows 和 macos 编写一个小型自包含服务。
它使用相同的代码库,因此在 Program.cs 中进行检查
我已经编写了该服务,并且在从 Visual Studio 中启动时它可以在 Windows 上运行。
我已经发布了它使用
dotnet publish .\WorkerServiceTest2\ -c Release -r win-x64 -- self-contained true /p:PublishSingleFile=true /p:PublishedTrimmed=true
并尝试使用安装它
runas /user:MYUSERNAME "sc.exe create WorkerServiceTest2 c:\Users\MYYUSERNAME\Documents\bla\bla\bla\WorkerServiceTest2.exe"
但它没有出现在服务列表中,并且
sc.exe start WorkerServiceTest2
说没有安装这个服务。
有没有什么地方可以看到 sc.exe 创建的结果? 或者也许有人可以看到我做错了什么?
非常感谢
我的服务 Program.cs 看起来像这样
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Runtime.InteropServices;
namespace WorkerServiceTest2
{
public class Program
{
public static void Main(string[] args)
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)){
Console.WriteLine("WinOS");
CreateHostBuilderWin(args).Build().Run();
} else
{
Console.WriteLine("MacOS");
CreateHostBuilderMac(args).Build().Run();
}
}
private static void configureServices(HostBuilderContext context, IServiceCollection services)
{
services.AddHostedService<Worker>();
}
public static IHostBuilder CreateHostBuilderWin(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
public static IHostBuilder CreateHostBuilderMac(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices(configureServices);
}
}
我的 Worker.cs 看起来像这样
using Microsoft.Extensions.Hosting;
using System.Threading;
using System.Threading.Tasks;
using WorkerServiceTest2.SocketService;
namespace WorkerServiceTest2
{
public class Worker : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//Her skal business logic være.
SocketServer socketServer = new SocketServer();
await socketServer.start();
}
}
}
}
【问题讨论】:
-
你介意用powershell代替
sc吗? -
那么最后它应该安装在带有脚本的用户机器上,这会有问题吗?
-
可能没有,但我对您的基础架构一无所知。但是我可以给你一个 powershell 脚本,我可以用它来安装我的所有服务。
-
感谢您的帮助,非常感谢!我想要这样,只是想看看那里是否有适合我的东西。泰!