gpt4 book ai didi

c# - 启动 Windows 服务时出现错误 1053(在 Visual Studio 中创建的 exe)

转载 作者:行者123 更新时间:2023-11-30 21:41:03 28 4
gpt4 key购买 nike

我有一个从 Visual Studio 中的项目创建的可执行文件,我想用它来创建服务(这样我就可以在不需要控制台窗口的情况下运行它)。我发布项目,并使用以下方法创建 Windows 服务:

sc create MY.SERVICE binpath= "C:\Program Files\Project\serviceProj\myService.exe 

该服务按预期显示在 Windows 服务管理器中。但是,每当我尝试启动该服务时,它会在大约 2 秒后失败并出现以下错误:

Windows could not start the MY.SERVICE on Local Computer. 
Error 1053: The service did not respond to the start or control request in a timely fashion.

我做过的事情:

在 Visual Studio 中从调试更改为发布

以管理员身份运行一切(创建服务、发布项目、启动服务等)。

我还在某处读到,增加服务管理器等待服务启动的时间可能会奏效。我添加了 Windows 注册表值来做到这一点,但不幸的是它不起作用。

从命令提示符启动服务通常只需 2-3 秒即可启动并开始监听请求,因此我不确定发生了什么。

感谢任何帮助。

这是我的 Startup.cs 类:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Serialization;
using Microsoft.AspNetCore.Hosting.WindowsServices;
using System.Diagnostics;
using System.IO;
using Serilog;
using System.Linq;

namespace My.Service
{
public class Startup
{
public static void Main(string[] args)
{
var exePath = Process.GetCurrentProcess().MainModule.FileName;
var directoryPath = Path.GetDirectoryName(exePath);

if (Debugger.IsAttached || args.Contains("--debug"))
{
var host = new WebHostBuilder()
.CaptureStartupErrors(true)
.UseKestrel()
.UseUrls("http://localhost:5002")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
else
{
var host = new WebHostBuilder()
.UseKestrel()
.UseUrls("http://localhost:5002")
.UseContentRoot(directoryPath)
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.RunAsService();
}
}


public Startup(IHostingEnvironment env)
{
//Setup Logger
Log.Logger = new LoggerConfiguration()
.WriteTo.Trace()
.MinimumLevel.Debug()
.CreateLogger();
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}

public IConfigurationRoot Configuration { get; set; }

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver();
});
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime lifetime)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}

app.UseStaticFiles();

app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}");
});
}
}
}

最佳答案

您看到的错误是来自 Windows 的通知,表明您启动的服务尚未在合理的时间(30 秒)内完成启动。

发生这种情况是因为您已将服务逻辑塞入应用程序的公共(public) Main() 方法中,这不是您想要的 Windows 服务。

Windows 服务包含一些支持服务的结构。服务的 Main() 中通常发生的所有事情都是加载服务,而不是实际启动它运行。该服务包括事件处理程序以支持响应标准服务操作,例如启动、停止、暂停、继续以及在系统关闭时进行处理。

所有 Windows 服务都具有的这种结构有点复杂,必须根据操作系统的规范构建。虽然可以手动构建 Windows 服务,但可能很难正确设置所有管道,因此让 Visual Studio 在这里帮助您要容易得多。

构建Windows服务最简单直接的方法就是让VS在你新建Visual Studio项目时创建一个Windows服务项目。新项目将包括您从一开始就需要的大部分必要管道和服务功能。

当然,您可以手动构建服务,但确实没有理由这样做。如果你确实想沿着手动构建的路径走下去,你至少需要执行以下操作(一个警告 - 我是从内存中执行此操作的,不久前我搬到了 VS 2017,所以这可能不完全正确):

  • 将 Windows 服务组件添加到您的项目。为此,请在解决方案资源管理器中右键单击您的项目并选择“添加”。在出现的菜单中,选择“组件...”。在出现的对话框中,选择“Windows 服务”。一个建议,在按下“添加”按钮之前给文件一个有意义的名称。

  • 添加该 Windows 服务组件后,右键单击它并设置其属性。

  • 要对 OnStart、OnStop、OnPause、OnContinue 和 OnShutdown 事件处理程序进行编程,请右键单击 Windows 服务设计空间(或右键单击解决方案资源管理器中的文件)并选择“查看代码”。

关于构建 Windows 服务还有很多东西需要了解,这里没有篇幅了。我建议找到一些关于该主题的好文档并研究它,然后再在此领域做很多事情,因为在这里做错事会对运行您的服务的机器产生相当大的影响。看看MSDN: Walkthrough: Creating a Windows Service Application in the Component Designer .它应该有助于更彻底地解释这一点。

关于c# - 启动 Windows 服务时出现错误 1053(在 Visual Studio 中创建的 exe),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43903288/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com