我正在为我的一项服务获得服务控制器:
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关于调用“获取此实例引用的服务的状态”的说法相矛盾。除非我不再以某种方式引用正确的实例...... ??
答案 0 :(得分:3)
您应该调用ServiceController
上的Refresh
方法,以确保您拥有当前状态:
private void tsmiStartServer_Click(object sender, EventArgs e)
{
_serviceController.Refresh();
if (_serviceController.Status == ServiceControllerStatus.Stopped)
this._serviceController.Start();
}