C# 无法从我的ASP.NET应用程序重新启动windows服务
我正在尝试使用以下代码从asp.net应用程序重新启动Windows时间服务,但它始终返回TimeoutException。我尝试了各种方法来删除此错误并重新启动服务,但不幸的是失败了。我为此目的使用的代码如下所示: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
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服务,问题仍然存在。因此,在咨询我们的网络管理员后,我找到了解决方案,即我发布的代码在我们的域之外的计算机上运行良好,因此问题是我的帐户授权。谢谢你的帮助。