C# 如何在c.net中以编程方式重新启动Windows服务

C# 如何在c.net中以编程方式重新启动Windows服务,c#,asp.net,vb.net,C#,Asp.net,Vb.net,有人能帮我吗?我如何在c.net中每隔15分钟以编程方式重新启动Windows服务?请帮助我。。 我用diz的方式编写代码 我一直喜欢dis way,直到课堂页面[RunInstallertrue] public class ProjectInstaller : System.Configuration.Install.Installer private System.ServiceProcess.ServiceProcessInstaller

有人能帮我吗?我如何在c.net中每隔15分钟以编程方式重新启动Windows服务?请帮助我。。 我用diz的方式编写代码 我一直喜欢dis way,直到课堂页面[RunInstallertrue]

public class ProjectInstaller : System.Configuration.Install.Installer 
private System.ServiceProcess.ServiceProcessInstaller 
                                  serviceProcessInstaller1;
private System.ServiceProcess.ServiceInstaller serviceInstaller1; 
public ProjectInstaller()
   InitializeComponent();
} 
private void InitializeComponent() 
{ 
   this.serviceProcessInstaller1 = 
     new System.ServiceProcess.ServiceProcessInstaller(); 
   this.serviceInstaller1 = 
     new System.ServiceProcess.ServiceInstaller(); 
   this.serviceProcessInstaller1.Account = 
     System.ServiceProcess.ServiceAccount.LocalSystem; 
   this.serviceProcessInstaller1.Password = null;
   this.serviceProcessInstaller1.Username = null; 
   this.serviceInstaller1.ServiceName = "MyNewService"; 
   this.serviceInstaller1.StartType = 
     System.ServiceProcess.ServiceStartMode.Automatic;

    this.Installers.AddRange
     (new System.Configuration.Install.Installer[] 
   { 
       this.serviceInstaller1, 
       this.serviceInstaller1});
   }
}

有几种方法可以做到这一点:

将服务更改为在AppDomain中承载当前进程的轻型存根。使用计时器服务卸载并重新启动AppDomain

创建两个服务。将“一个服务”设置为计时器,并使用访问您的服务的以编程方式重新启动此服务,以停止并重新启动它


有几种方法可以做到这一点:

将服务更改为在AppDomain中承载当前进程的轻型存根。使用计时器服务卸载并重新启动AppDomain

创建两个服务。将“一个服务”设置为计时器,并使用访问您的服务的以编程方式重新启动此服务,以停止并重新启动它


您不应该重新启动完整的服务。 相反,您可以在服务中创建一个定时,定时触发

像这样

private void StartTimer()
{
    System.Threading.Timer timer = 
        new System.Threading.Timer(
            TimerCompleted, 
            null, 
            TimeSpan.FromMinutes(15), 
            TimeSpan.FromMinutes(15));
}

private void TimerCompleted(object state)
{
    // Call your action here
    ProcessFiles();
}
从服务开始时调用StartTimer,并将所有工作放入ProcessFiles中


但是,如果您实际上只是想监视目录中的更改,那么您可以改为使用。它可以在文件系统发生更改时立即通知您。

您不应该重新启动完整的服务。 相反,您可以在服务中创建一个定时,定时触发

像这样

private void StartTimer()
{
    System.Threading.Timer timer = 
        new System.Threading.Timer(
            TimerCompleted, 
            null, 
            TimeSpan.FromMinutes(15), 
            TimeSpan.FromMinutes(15));
}

private void TimerCompleted(object state)
{
    // Call your action here
    ProcessFiles();
}
从服务开始时调用StartTimer,并将所有工作放入ProcessFiles中


但是,如果您实际上只是想监视目录中的更改,那么您可以改为使用。它可以在文件系统发生更改时立即通知您。

您可以使用此代码重新启动服务:

using System.Diagnostics;

public static void RestartService(string serviceName)
{
var psi = new ProcessStartInfo("net.exe", "stop " + serviceName);
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = true;
psi.WorkingDirectory = Environment.SystemDirectory;
var st = Process.Start(psi);
st.WaitForExit();

psi = new ProcessStartInfo("net.exe", "start " + serviceName);
psi.UseShellExecute = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.WorkingDirectory = Environment.SystemDirectory;
st = Process.Start(psi);
st.WaitForExit();
}


我得到了这个代码,测试了它,它成功了。使用间隔为15分钟的计时器,每15分钟调用一次。

您可以使用此代码重新启动服务:

using System.Diagnostics;

public static void RestartService(string serviceName)
{
var psi = new ProcessStartInfo("net.exe", "stop " + serviceName);
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.UseShellExecute = true;
psi.WorkingDirectory = Environment.SystemDirectory;
var st = Process.Start(psi);
st.WaitForExit();

psi = new ProcessStartInfo("net.exe", "start " + serviceName);
psi.UseShellExecute = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.WorkingDirectory = Environment.SystemDirectory;
st = Process.Start(psi);
st.WaitForExit();
}

我得到了这个代码,测试了它,它成功了。使用间隔为15分钟的计时器,每15分钟调用一次

使用以下命令创建批处理文件:

网络停止服务名 网络启动服务名

使用windows计划程序并创建每15分钟运行此脚本的计划

使用以下命令创建批处理文件:

网络停止服务名 网络启动服务名

使用windows计划程序并创建每15分钟运行此脚本的计划


为什么需要每15分钟重新启动一次?如果希望代码每15分钟运行一次,请使用计时器并将计时器勾号事件设置为应该运行的代码。每15分钟重新启动服务听起来像是在试图解决其他问题。确切地说,为什么要重新启动服务?服务被设计为长时间连续运行,如果这不是您想要的,那么服务可能是作业的错误工具。顺便问一下,您的windows服务与您标记问题的asp.net标记有什么关系?如果与问题无关,您应该删除该标签。@albin…thnks fr回答是的,您的权利!!在一个特定的根文件夹中,一些文件将在tht中出现并落下,我的服务将启动作业。一段时间后,作业将再次完成。一些文件将在我手动重新启动的特定时间到达该根文件夹,因此我问你为什么需要每15分钟重新启动一次?如果希望代码每15分钟运行一次,请使用计时器并将计时器勾号事件设置为应该运行的代码。每15分钟重新启动服务听起来像是在试图解决其他问题。确切地说,为什么要重新启动服务?服务被设计为长时间连续运行,如果这不是您想要的,那么服务可能是作业的错误工具。顺便问一下,您的windows服务与您标记问题的asp.net标记有什么关系?如果与问题无关,您应该删除该标签。@albin…thnks fr回答是的,您的权利!!在一个特定的根文件夹中,一些文件会在tht中出现并落下,我的服务将启动作业。一段时间后,作业将再次完成。一些文件将在我手动重新启动的特定时间到达该根文件夹,以便我问突然的否决票是怎么回事?所以,在投票时写评论指出可能的改进是很有礼貌的。投票突然被否决是怎么回事?因此,在投票时写评论指出可能的改进是一种很好的方式。