簡體   English   中英

一個Windows服務試圖啟動另一個:拒絕訪問

[英]One windows service trying to start another: access denied

我在生產服務器上運行Windows服務。 非常重要的一點是,如果該服務由於任何原因而崩潰,我們必須立即恢復,因此我編寫了一個Monitor Service,其唯一的目的是繼續檢查主服務是否已啟動並正在運行,如果不是,則發出該服務。求救信號。 還應該啟動已關閉的服務...而這是無法正常工作的部分:

public static void CheckService(string checkServiceName, string myServiceName, bool restartIfStopped = false)
{
    var ctl = ServiceController.GetServices()
         .FirstOrDefault(s => s.ServiceName == checkServiceName);
    var error = "";
    if (ctl == null)
        error = "{0} is not installed!".Fmt(checkServiceName);
    else if (ctl.Status != ServiceControllerStatus.Running)
    {
        error = "{0} is in status {1}".Fmt(checkServiceName, ctl.Status);
        if (restartIfStopped)
            try
            {
                ctl.Start();
                // no error = success
                error += "\r\nService was automatically restarted.";
            }
            catch (Exception ex)
            {
                // send to windows application log
                Log("Failed to restart service:\r\n"+ex, myServiceName, EventLogEntryType.Warning);
            }
    }
    // other code here to send out email notifications
}

問題是,當我嘗試使用ctl.Start()重新啟動服務時,它會在應用程序日志中出現以下錯誤而異常:

無法重啟服務:

System.InvalidOperationException:無法在計算機“。”上打開MyService服務。 ---> System.ComponentModel.Win32Exception:訪問被拒絕

兩種服務都設置為使用“網絡服務”運行。 我已經在兩個可執行文件夾上為“網絡服務”授予了完全安全權限。

還有什么可能導致這種情況?

您可以設置服務失敗的情況下重新啟動(如描述在這里 )。

看起來像是一個管理許可。

我會嘗試兩件事

  1. 將Application Manifest添加到解決方案中,有關更多詳細信息,請參見: http : //www.codeproject.com/Questions/629067/How-to-add-a-manifest-file-in-my-project

  2. 賦予手動權限

轉到c:// Program Files / ApplicationFolder / .exe右鍵單擊.exe並轉到“屬性”,然后轉到“兼容性”選項卡,並選中true以以管理員級別運行此程序。

暫無
暫無

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

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