ServiceControllerStatus没有给我当前状态

时间:2010-09-24 07:04:27

标签: c#

我正在为我的一项服务获得服务控制器:

foreach (ServiceController sc in ServiceController.GetServices())
{
    if (sc.ServiceName == ConfigurationManager.SYNC_SERVICE_NAME)
    {
        this._serviceController = sc;
        break;
    }
}

然后在用户触发操作时调用状态函数:

private void tsmiStartServer_Click(object sender, EventArgs e)
{
    if (_serviceController.Status == ServiceControllerStatus.Stopped)                    
        this._serviceController.Start();
}

但是,即使服务停止,状态也会显示为正在运行。实际上,状态似乎根本没有变化,导致我认为在获得服务控制器对象时它被检测到并缓存。

但是,我发现如果在调用Status属性之前调用Refresh(),它将检测服务的正确状态。这似乎与doco关于调用“获取此实例引用的服务的状态”的说法相矛盾。除非我不再以某种方式引用正确的实例...... ??

1 个答案:

答案 0 :(得分:3)

您应该调用ServiceController上的Refresh方法,以确保您拥有当前状态:

private void tsmiStartServer_Click(object sender, EventArgs e)
{
    _serviceController.Refresh();
    if (_serviceController.Status == ServiceControllerStatus.Stopped)                    
        this._serviceController.Start();
}