簡體   English   中英

以編程方式檢查 Windows 服務是否正在運行 c#

[英]Programmatically check if a windows service is running c#

我正在編寫一個應用程序來檢查是否安裝了某些軟件。 我的一個案例正在尋找服務。 我知道服務的完整路徑。 ie "c:\\some folder\\MyService.exe" 我想檢查服務是否安裝並運行。 我嘗試過 process.GetProcessbyName,但遇到了 64 位與 32 位進程的問題。 我也試過 ManagementObject,但我一直收到無效的對象路徑。 是否有可能獲得只知道可執行文件路徑的服務?

我只知道可執行文件的名稱和路徑。 也可能有多個版本的可執行文件,每個版本都有不同的服務名稱,而我沒有。

嘗試查看可執行路徑的 ServiceController / Management 對象。 然后根據可執行路徑確定服務是否正在運行。

如何獲取可執行路徑: [1] [2] [3]

借用上面的回答

ManagementClass mc = new ManagementClass("Win32_Service");
foreach(ManagementObject mo in mc.GetInstances())
{
    if(mo.GetPropertyValue("PathName").ToString().Trim('"') == "<your executable path>")
    {
        return mo.GetPropertyValue("Name").ToString(); // or return true;
    }
}

我還沒有測試過這個,並且評論建議PathName也可能返回命令行參數,因此您可能需要編寫另一種方法來將路徑與參數分開(我假設它只是字符串上的拆分),並在If語句中將PathName傳遞給它..

以下是檢查服務是否已安裝以及獲取服務狀態的方法

public static string CheckService(string ServiceName)
        {
            //check service
            var services = ServiceController.GetServices();
            string serviceStatu = string.Empty;
            bool isServiceExist = false;
            foreach (var s in services)
            {
                if (s.ServiceName == ServiceName)
                {
                    serviceStatu = "Service installed , current status: " + s.Status;
                    isServiceExist = true;
                }


            }

            if (!isServiceExist)
            {
                serviceStatu= "Service is not installed";
            }

            return serviceStatu;
        }

Console.WriteLine(CheckService("Service name"));

您需要將System.ServiceProcess添加到項目引用中

暫無
暫無

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

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