任何人都可以帮助我......如何在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});
}
}
答案 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)
你可以做到这一点:
将您的服务更改为轻量级存根,以便在AppDomain中托管您当前的进程。使用计时器服务卸载并重新启动AppDomain。
创建两项服务。将一项服务作为计时器并使用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分钟运行一次此脚本的计划。