C# 无法从我的ASP.NET应用程序重新启动windows服务

C# 无法从我的ASP.NET应用程序重新启动windows服务,c#,asp.net,service,C#,Asp.net,Service,我正在尝试使用以下代码从asp.net应用程序重新启动Windows时间服务,但它始终返回TimeoutException。我尝试了各种方法来删除此错误并重新启动服务,但不幸的是失败了。我为此目的使用的代码如下所示: private ServiceController service = new ServiceController( "W32Time", Environment.MachineName ); private TimeSpan timeout = TimeSpan.FromMill

我正在尝试使用以下代码从asp.net应用程序重新启动Windows时间服务,但它始终返回TimeoutException。我尝试了各种方法来删除此错误并重新启动服务,但不幸的是失败了。我为此目的使用的代码如下所示:

private ServiceController service = new ServiceController( "W32Time", Environment.MachineName );
private TimeSpan timeout = TimeSpan.FromMilliseconds( 35000 );//15000 was the old value

// Restart W32Time Service
private void RestartService( )
{
    try
    {
        // Stop service if it is running
        if( service.Status == ServiceControllerStatus.Running )
        {
            service.Stop( );
            service.WaitForStatus( ServiceControllerStatus.Stopped, timeout );
        }

        // Start service if it is stopped
        if( service.Status == ServiceControllerStatus.Stopped )
        {
            if (!(service.Status.Equals(ServiceControllerStatus.Stopped) || service.Status.Equals(ServiceControllerStatus.StopPending)))
            {
                service.Stop();
            }

            service.Start( );
            service.WaitForStatus( ServiceControllerStatus.Running, timeout );
        }
    }
    catch( Exception ex )
    {
        log.Error( "Error in restarting windows service.", ex );
    }
}

我正在使用Windows7。有人能给我一个解决这个问题的办法吗?任何帮助都将不胜感激。

Davids评论与此相关,您还必须检查对w32时间服务的依赖关系。可能不存在什么?但如果真的发生了,它会给你带来麻烦。对于64位机器,我会检查“W32..”的相关性

[编辑] 我附上了一些代码示例,至少可以在另一台Windows7计算机上使用。你上面提供的代码对我来说同样有效

class Program
{
    static void Main()
    {
        WindowsServiceManager service = new WindowsServiceManager();
        service.Run("W32Time", 2000);
        service.End("W32Time", 2000);
    }
}

public class WindowsServiceManager
{
    internal void Run(string serviceId, int timeOut)
    {
        using (ServiceController serviceController = new ServiceController(serviceId))
        {
            TimeSpan t = TimeSpan.FromMilliseconds(timeOut);
            serviceController.Start();
            serviceController.WaitForStatus(ServiceControllerStatus.Running, t);
        }
    }

    internal void End(string serviceId, int timeOut)
    {
        using (ServiceController serviceController = new ServiceController(serviceId))
        {
            TimeSpan t = TimeSpan.FromMilliseconds(timeOut);
            serviceController.Stop();
            serviceController.WaitForStatus(ServiceControllerStatus.Stopped, t);
        }
    }
}

应用程序运行时使用的帐户是否具有访问服务的权限?名称仍然是W32Time(64位)。顺便说一句,默认情况下,W32Time没有依赖项。@请注意,您在那里得到了要点,我没有处于从Android检查的模式。在某些情况下,这些都是问题描述的完全合法的情况。我会说我尝试了32次,并取得了成功。服务是否完全可以手动启动和停止(通过“服务”对话框)?你能用你的.NET控制其他事件吗?W32Time似乎也是作为本地服务运行的,这将使我尝试省略第二个参数“Environment.MachineName”,以使类实例化找到该帐户本身(,msdn)。谢谢Joannas的回答。即使手动重新启动Windows Time服务,问题仍然存在。因此,在咨询我们的网络管理员后,我找到了解决方案,即我发布的代码在我们的域之外的计算机上运行良好,因此问题是我的帐户授权。谢谢你的帮助。