我已经使用HangFire在C#中创建了Windows服务,如下所示:
using System;
using System.Configuration;
using System.ServiceProcess;
using Hangfire;
using Hangfire.SqlServer;
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
private BackgroundJobServer _server;
public Service1()
{
InitializeComponent();
GlobalConfiguration.Configuration.UseSqlServerStorage("connection_string");
}
protected override void OnStart(string[] args)
{
_server = new BackgroundJobServer();
}
protected override void OnStop()
{
_server.Dispose();
}
}
}
我在Windows 10上使用VS 2017。 编译后,服务安装成功但未启动! 当我尝试手动启动时,它会给出著名的错误1053:服务未及时响应启动或控制请求。
我在stackoverflow.com中找到了有关授予NT AUTHORITY \ SYSTEM权限的答案。它不能解决我的问题 请帮忙。谢谢。
答案 0 :(得分:0)
调试使用以下模式:
1。将此方法添加到WindowsService1
类中:
public void OnDebug()
{
OnStart(null);
}
2。在Program.cs
文件中,将内容更改为类似的内容:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static void Main()
{
#if DEBUG
var Service = new WindowsService1();
Service.OnDebug();
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new WindowsService1()
};
ServiceBase.Run(ServicesToRun);
#endif
}
}
通过这种方式,您可以在用户会话中运行代码并检查可能的问题(非特定于用户的问题)。
**请勿将所有代码都放在OnStart
方法上。每当Started
结束时,服务的状态将变为OnStart
。
**使用线程代替您工作:
System.Threading.Thread MainThread { get; set; } = null;
protected override void OnStart(string[] args)
{
MainThread = new System.Threading.Thread(new System.Threading.ThreadStart(new Action(()=>{
// Put your codes here ...
})));
MainThread.Start();
}
protected override void OnStop()
{
MainThread?.Abort();
}
大多数情况下,您的错误是由于此问题造成的。