如何在c#.net中以编程方式重启我的窗口服务

时间:2011-02-26 14:47:54

标签: c# asp.net vb.net

任何人都可以帮助我......如何在c#.net中每15分钟以编程方式重启我的窗口服务请帮帮我.. 我已经在我的代码中完成了diz方式 在课程页面[RunInstaller(true)]

中,我一直喜欢这样做
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});
   }
}

4 个答案:

答案 0 :(得分:4)

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

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();

}

我得到了这段代码here,经过测试并且有效。使用间隔15分钟的计时器每15分钟调用一次。

答案 1 :(得分:1)

你可以做到这一点:

  1. 将您的服务更改为轻量级存根,以便在AppDomain中托管您当前的进程。使用计时器服务卸载并重新启动AppDomain。

  2. 创建两项服务。将一项服务作为计时器并使用ServiceController以编程方式重新启动此服务以访问您的服务以停止并重新启动它。

答案 2 :(得分:0)

您不应重新启动完整的服务 相反,您可以在服务中创建定期触发的计时器

喜欢这个

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

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

答案 3 :(得分:0)

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

    net stop“ServiceName” net start“ServiceName”

  • 使用Windows计划程序并创建一个每15分钟运行一次此脚本的计划。