我拥有一个 web api,它将像用户机器上的 windows 服务一样运行,我如何生成这个应用程序的安装程序? [复制]

Posted

技术标签:

【中文标题】我拥有一个 web api,它将像用户机器上的 windows 服务一样运行,我如何生成这个应用程序的安装程序? [复制]【英文标题】:I own a web api that will run like a windows serivce on the user's machine, how can I generate an installer of this application? [duplicate] 【发布时间】:2020-10-20 21:11:26 【问题描述】:

我有一个在 .NET Core 2.1.7 上运行的应用程序。 这将安装在我客户的机器上。 我想将其作为 Windows 服务运行。

我该怎么做? 最好的方法是什么?

自托管:

public class Program

    public static void Main(string[] args)
    
        var isService = !(Debugger.IsAttached || args.Contains("--console"));
        var builder = CreateWebHostBuilder(args.Where(arg => arg != "--console").ToArray());

        if (isService)
        
            var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
            var pathToContentRoot = Path.GetDirectoryName(pathToExe);
            builder.UseContentRoot(pathToContentRoot);
        

        var host = builder.Build();

        if (isService)
        
            host.RunAsService();
        
        else
        
            host.Run();
        
    

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();

【问题讨论】:

【参考方案1】:

既然您这样做了:var isService = !(Debugger.IsAttached || args.Contains("--console")); 一旦您发布您的应用程序,您将始终尝试使用host.RunAsService(); 作为服务运行。如果您尝试通过调用 .exe 程序来运行它,则会出现错误。

要创建 Windows 服务,您只需在具有管理员权限的命令提示符下运行以下命令:

sc create ServiceName binPath= "c:\pathtoexe\file.exe"

还要确保在“binPath=”之后留一个空格,否则将不考虑该命令。

【讨论】:

以上是关于我拥有一个 web api,它将像用户机器上的 windows 服务一样运行,我如何生成这个应用程序的安装程序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

反序列化 Web.API 参数时未调用自定义 Json.NET JsonConverter

是否有某些静态单元填充了其余的视图?

开发机器上的网络核心 Web api 应用程序上的 Kestrel 错误,但在另一台机器上却没有

win32 api - 如何检查远程机器上的用户权限

PayPal API 可以实时跟踪入站付款吗?

如何使用 Dio 在 Flutter 中调用 API?