[英]When installing Windows service and then trying to run, I get an Error 1053. Saying my service is taking too long to start
錯誤 1053:windows 服務未及時啟動
我已經按照無數在線教程中顯示的方式設置了我的服務,但是我的 OnStart 方法似乎仍然沒有被調用。 這個過程應該運行,然后無限循環並不斷檢查服務器是否有要運行的命令。 這是我的主要內容:
static void Main(string[] args)
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new AgentService(args)
};
ServiceBase.Run(ServicesToRun);
}
這是我的服務構造函數和OnStart
樣子:
public AgentService(string[] args)
{
InitializeComponent();
this.Args = new ServiceArguments();
this.ValidArgs = this.Args.SetArgs(args);
this.AgentCycle = Int32.Parse(Args.Cycle);
}
protected override void OnStart(string[] args)
{
ServiceStatus serviceStatus = new ServiceStatus
{
dwCurrentState = ServiceState.SERVICE_START_PENDING,
dwWaitHint = 100
};
this.CimCommands = new Dictionary<string, CimCommand>();
SetServiceStatus(this.ServiceHandle, ref serviceStatus);
serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
SetServiceStatus(this.ServiceHandle, ref serviceStatus);
if (this.ValidArgs)
RunAgent();
}
我通過命令行提交 args,但如果沒有給出,我正在使用環境變量。 所有這些都出現在我的機器上,所以我不明白為什么我的服務沒有“及時”啟動。 我只有 2 個額外的依賴項。 一個是Newtonsoft.Json
,另一個是RestSharp
。
我還嘗試使用 TopShelf 將其編寫為控制台應用程序,但我也遇到了同樣的錯誤。 邏輯很合理,我已經測試了我的方法。 有任何想法嗎?
編輯:好的,這是解釋該服務目標的最佳方式......該服務應該每 5 秒調用一次 api/server,然后接收一個 json,告訴它在 Windows 機器上運行什么命令。 一旦完成所有這些命令,它會再次詢問服務器是否有任何工作要完成,然后從頭開始。 自定義類型只是與 Newtonsoft 一起使用的 json_objects,而服務參數只是一個具有 5 個字符串值和 1 個布爾值的對象。 然后是用於解析來自 cmd 行、環境變量或配置文件的參數的函數。
是的,從 RunAgent 調用的函數肯定存在無限循環。
雖然RunAgent()
不返回,但OnStart()
不返回。 當OnStart()
不返回時,服務管理器將終止該進程,因為“啟動需要很長時間”。 不要將無限循環放入 OnStart 函數中!
這一次,消息正是它所說的。 它也完全適用於(讓您修復錯誤代碼)。 對於輪詢,您需要在“onStart()”中啟動的 Timer 之類的東西。 也許是一個單獨的后台任務或線程。 不是您阻止 OnStart() 的自定義循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.