C# .NET检查全文筛选器后台程序启动器是否正在运行

C# .NET检查全文筛选器后台程序启动器是否正在运行,c#,.net,sql-server,C#,.net,Sql Server,有没有办法从C#代码知道全文服务是否在MSSQL服务器下运行? 我尝试了Server.FullTextService.State,但没有成功。谢谢 Ok从ServiceController获取服务状态在本地计算机上运行正常,但如果您想了解服务是否在远程计算机上运行,则会失败 一种解决方案是查询sys.dm_服务器_服务: select status_desc from sys.dm_server_services WHERE filename LIKE '%fdlauncher.exe%'

有没有办法从C#代码知道全文服务是否在MSSQL服务器下运行? 我尝试了Server.FullTextService.State,但没有成功。谢谢

Ok从ServiceController获取服务状态在本地计算机上运行正常,但如果您想了解服务是否在远程计算机上运行,则会失败

一种解决方案是查询sys.dm_服务器_服务:

  select status_desc from sys.dm_server_services WHERE filename LIKE '%fdlauncher.exe%'

  select status_desc from sys.dm_server_services WHERE service_account = 'NT service\MSSQLFDLauncher'
请注意,此方法可能不适用于某些SQL 2012实例上的全文服务:


如果此服务在本地系统上运行,您只需使用以下代码进行检查:

 using System.ServiceProcess;

 ...

        ServiceController sc = new ServiceController("MSSQLFDLauncher$MSSQLSERVER2012");

        switch (sc.Status)
        {
            case ServiceControllerStatus.Running:
                Console.WriteLine("Running");
                break;
            default:
                Console.WriteLine("Else");
                break;
        }
您可以在windows服务中检查服务名称

编辑: 要自动检查服务名称,请使用以下代码:

DataTable dt = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources();
ServiceController sc
foreach(DataRow d in dt.Rows)
{
 string instance = dr["InstanceName"].ToString();
 sc = new ServiceController("MSSQLFDLauncher$"+instance );

 switch (sc.Status)
        {
            case ServiceControllerStatus.Running:
                Console.WriteLine("MSSQLFDLauncher for" + instance + "is Running");
                break;
            default:
                Console.WriteLine("MSSQLFDLauncher for" + instance + "is NOT Running");
                break;
        }
}

我在这里找到了很好的解决方案: 如果不确定服务名称(适用于MSSQL Server 2008R2和2012),可以使用如下查询:

在某些MSSQL 2012(Denali)服务器上有一个轻微的缺点(bug)。sys.dm_server_服务仅返回SQL server代理的状态 详情如下:
希望这能帮助别人

谢谢,我工作过。服务的名字是“MSSQLFDLauncher”RafałS,你的方法很有魅力。但是有没有一种方法可以明确地知道Msql服务的名称呢?在不同的机器上,名称可能不同。根据本博客,SQL Server服务始终具有相同的名称,如果本地机器具有多个SQL Server实例,则服务名称遵循以下模式:[service_name]$[named_instance]即MSSQLSFDLauncher$MSSQL2012Yeah,再次感谢这种命名模式Rafal,这真的很有帮助。我还发现,如果我们想在远程服务器上运行服务,最好使用sys.dm_server_服务查询它。因为据我所知,ServiceController只能检索当前机器上运行的服务,我很高兴能为您提供帮助。请将此帖子标记为已回答,并将有关sys.dm_server_服务的信息添加到您的第一篇帖子中,这样,如果其他人有相同的问题,他可能需要花费更少的时间。干杯
 select status_desc from sys.dm_server_services WHERE filename LIKE '%fdlauncher.exe%'

 select status_desc from sys.dm_server_services WHERE service_account = 'NT Service\MSSQLFDLauncher'