簡體   English   中英

安裝 Windows 服務然后嘗試運行時,我收到錯誤 1053。說我的服務啟動時間過長

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM