使用Array.Findall搜索ServiceController数组?

时间:2014-07-24 01:56:17

标签: c# .net vb.net service servicecontroller

我现在再次使用.NET进行编码,我正试图避免进行For Each循环,使用Array.Findall进行编码。

我想获取机器上安装的所有服务的数组,然后传递一个字符串来搜索任何匹配的友好显示名称;如果找到,请返回匹配项及其实际服务名称。

即。传递字符串“Calibre”,它将搜索所有服务中任何在其显示名称中具有“Calibre”的服务。我这样做是为了一种“模糊搜索”,以防实际服务名称未知,如果碰巧有多个匹配传递的字符串,一堆服务将无法启动/停止。

我有:

Dim strServiceName = "Calibre"  
Dim scServices() As ServiceController = ServiceController.GetServices()  
Dim value2() As String = Array.FindAll(scServices, Function(x) x.DisplayName.ToLower().Contains(strServiceName))

但是得到错误:

  

类型'1维数组的值   System.ServiceProcess.ServiceController'无法转换为   '1维数组String'因为   'System.ServiceProcess.ServiceController'不是派生自的   '字符串',“

我知道我可能错过了一些非常简单的东西,但此刻它正在躲避我,哈哈。

1 个答案:

答案 0 :(得分:1)

返回的Array.FindAll<T>的遗传类型与数组的遗传类型相同,即ServiceController。

如果您想获得所有服务&#39;在DisplayName中包含特定名称的名称,您应该从DisplayName中选择ServiceController,如下所示:

Dim value2() As String = Array.FindAll(scServices, Function(x) x.DisplayName.ToLower().Contains(strServiceName))
                              .Select(Function(x) x.DisplayName).ToArray()