当前位置:  开发笔记 > 运维 > 正文

如何以编程方式重启Windows服务?

如何解决《如何以编程方式重启Windows服务?》经验,为你挑选了6个好方法。

我需要在.NET中编写健壮的代码,以使Windows服务(服务器2003)能够重新启动.这样做的最佳途径是什么?是否有一些.NET API可以做到这一点?



1> TheSoftwareJ..:

将服务设置为在失败后重新启动(双击控制面板中的服务并浏览这些选项卡 - 我忘记了它的名称).然后,只要您希望服务重新启动,只需调用Environment.Exit(1)(或任何非零返回),操作系统将为您重新启动它.


我看到这是如何实现所需的行为,但返回码为1意味着告诉系统存在错误.如果实际上没有错误并且您只想重新启动服务,这不是一种不好的做法吗?
Fyi位置在服务面板中,右键单击相关服务并选择属性,然后选择恢复选项卡.
这可以通过安装后事件中的服务安装程序以编程方式完成,无需单击...如果您的服务在远程服务器上并且您需要每天安装几次,例如在测试期间怎么办?
@mgttlinger:我认为是的,当您的服务健康时,这是一种不好的做法,所以它永远不需要重新启动.但是一些服务架构是我们无法实现的,如果它们需要重新启动是一个不太好的症状,所以关闭并释放一些最小的资源(如果可能的话)和"切断脚"没有问题,因为离开服务运行不正确可能会更糟(无用).
@JohnLeidegren如果你想要一个正确的关闭你可以设置`Service.ExitCode = 1`然后执行`Service.Stop()`以及启用服务恢复设置屏幕上的"启用错误停止操作"复选框.这样做可以实现正确的关闭并仍然可以触发重启.
我喜欢它,但正如@devshorts所指出的那样,调用exit将无法确保进程被关闭或正确处理,这可能会产生不利影响.
您是否可以使用退出代码1641"ERROR_SUCCESS_REBOOT_INITIATED"?

2> Khalid Raham..:
Dim proc As New Process()
Dim psi As New ProcessStartInfo()

psi.CreateNoWindow = True
psi.FileName = "cmd.exe"
psi.Arguments = "/C net stop YOURSERVICENAMEHERE && net start YOURSERVICENAMEHERE"
psi.LoadUserProfile = False
psi.UseShellExecute = False
psi.WindowStyle = ProcessWindowStyle.Hidden
proc.StartInfo = psi
proc.Start()


这仅适用于在特权帐户下运行的服务,无论如何这都是个坏主意.
如果服务名称包含空格,请记住添加"".

3> Greg Hewgill..:

您无法确定您的服务运行的用户帐户是否具有停止和重新启动服务的权限.



4> 小智..:

您可以创建一个自我重启的DOS命令提示符进程:

 Process process = new Process();
 process.StartInfo.FileName = "cmd";
 process.StartInfo.Arguments = "/c net stop \"servicename\" & net start \"servicename\"";
 process.Start();



5> Filip..:
const string strCmdText = "/C net stop \"SERVICENAME\"&net start \"SERVICENAME\"";
Process.Start("CMD.exe", strCmdText);

SERVICENAME您的服务名称在哪里(为了考虑服务名称中的空格而包含的双引号,否则可以省略).

清洁,无需自动重启配置.


学习了关于&vs &&的新内容:[command1]&[command2]将始终按顺序执行两个命令,而[command1] && [command2]仅在command1成功运行时运行command2(http://www.autoitscript.com/forum/主题/ 54864-运行多个-DOS的命令功能于一身的行/ p = 415739)

6> Brody..:

这取决于你希望它重新启动的原因.

如果您只是想找到一种方法让服务定期自行清理,那么您可以在服务中运行一个定期执行清除例程的计时器.

如果您正在寻找一种在失败时重新启动的方法 - 服务主机本身可以在设置时提供该功能.

那你为什么需要重启服务器呢?你想要实现什么目标?

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有