[英]Programmatically check if a windows service is running c#
我正在編寫一個應用程序來檢查是否安裝了某些軟件。 我的一個案例正在尋找服務。 我知道服務的完整路徑。 ie "c:\\some folder\\MyService.exe" 我想檢查服務是否安裝並運行。 我嘗試過 process.GetProcessbyName,但遇到了 64 位與 32 位進程的問題。 我也試過 ManagementObject,但我一直收到無效的對象路徑。 是否有可能獲得只知道可執行文件路徑的服務?
我只知道可執行文件的名稱和路徑。 也可能有多個版本的可執行文件,每個版本都有不同的服務名稱,而我沒有。
嘗試查看可執行路徑的 ServiceController / Management 對象。 然后根據可執行路徑確定服務是否正在運行。
借用上面的回答
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.