簡體   English   中英

Windows Service在調試中執行代碼,但在發布中不執行

[英]Windows Service executes code in debug, but not in release

我正在托管WCF-webservice的Windows Service上運行,當我在調試模式下運行它時,它可以正常工作:

#if DEBUG
        SynchroService myService = new SynchroService();
        myService.OnDebugStart();
#else
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new SynchroService() 
            };

            ServiceBase.Run(ServicesToRun);

#endif

OnDebugStart()只是調用Windows服務的OnStart()方法,運行的線程只是無限運行的線程(直到調用OnStop()為止),以檢查該服務是否仍然在線和在線。

        protected override void OnStart(string[] args)
    {
        try
        {
            ServiceStatus serviceStatus = new ServiceStatus();
            serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
            SetServiceStatus(this.ServiceHandle, ref serviceStatus);

            syncService = new SynchroComService();
            myServiceHost = new ServiceHost(syncService);
            myServiceHost.Open();
            syncService.StartListening();

            thread = new Thread(CheckHost);
            thread.Start();
            serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
            SetServiceStatus(this.ServiceHandle, ref serviceStatus);
        }
        catch (Exception ex)
        {
            WriteError(ex);
        }
    }

現在,當我創建WCF服務(syncService)時,它應該運行代碼以啟動SQLDependency並開始偵聽數據庫。 當我在debugmode中啟動它時,它工作得很好,但是當我在release中運行它時,該服務將被托管,但是代碼不會執行。

我到處都在尋找相同類型的答案或問題,但是我什么也沒想出來。 因此,如果有人遇到相同類型的問題,請告訴您如何解決。

親切的問候

問題不在於我的代碼,而是與運行服務時的權限有關。
該服務已作為本地系統帳戶啟動,但沒有運行該服務/執行代碼的權限。

要更改運行服務的帳戶:

  1. 打開services.msc
  2. 右鍵單擊服務名稱
  3. 轉到登錄選項卡,然后將帳戶更改為具有正確權限的帳戶
  4. 重新啟動服務

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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