确保可执行文件始终在运行?

jma*_*erx 4 windows windows-server-2008 vps

我有一个运行 Windows Server 2008 R2 的 vps。

我有一个始终需要运行的可执行文件。即使我没有登录。

假设出现问题并且服务器意外重新启动,我应该不必登录即可启动。有没有办法做到这一点?

此外,我认为这不可能完成,但是,说应用程序崩溃,有没有办法让操作系统关闭崩溃的可执行文件并重新启动它?

另外,当我以管理员身份登录时,如果我能看到它正在运行,那也很棒。(wg: 可见的控制台窗口)

谢谢

Rya*_*ies 9

既然这是您的游戏,这意味着您拥有代码,那么这意味着您需要将其重写为 Windows 服务。服务器用于运行服务。Windows 服务设计为无需用户交互即可运行,无论是否有人登录,并且可以在机器启动时自动启动。(只需将您的服务设置为自动,它会在操作系统加载后立即启动。)此外,您可以在服务控制器中定义高级恢复选项,让 Windows 在崩溃时自动为您重新启动服务,甚至向您发送电子邮件如果您愿意,通知您您的服务已崩溃。

恢复选项

您不直接与 Windows 服务交互。Windows 服务没有用户界面,也不在桌面上创建窗口。(他们不应该。)当您登录时,您将看不到它的控制台窗口。但是,您可以编写一个可以与您的服务交互的单独应用程序,以允许用户配置设置或对您的服务执行管理功能。您的管理应用程序可能用于设置和读取您的服务使用的注册表项或配置文件设置等。

基本上,除了我上面刚刚描述的之外,您所做的任何其他事情都是错误的(TM),恕我直言。

但为了完整起见,让我们探索一些您可能会做错的方法,但在技术上仍然可以完成您想要的。

假设出现问题并且服务器意外重新启动,我应该不必登录即可启动。有没有办法做到这一点?

当然。通过将可执行文件放入HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. (抱歉,这是用于用户登录。)或者将其放在配置为在系统启动时运行的计划任务中。(当然,如果您使用 Windows 服务路由,只需在服务控制器中将您的服务设置为自动即可。)

说应用程序崩溃了,有没有办法让操作系统关闭崩溃的可执行文件并重新启动它?

这根本不符合逻辑。如果进程仍在运行,则它没有崩溃。如果它因为您在代码中做错了什么而挂起,例如,缺少异常处理,那正是您需要在代码中修复的问题。

另一方面,如果您想每 5 分钟(通过任务计划程序)运行一个脚本来检查是否FunGame.exe正在运行,并在它没有运行时启动它,那么您可以自由地这样做......如果你在我的一台服务器上运行类似的东西,我会讨厌你。

另外,当我以管理员身份登录时,如果我能看到它正在运行,那也很棒。(wg: 可见的控制台窗口)

不会发生 -除非您采纳我的建议,将专门设计为管理/监控界面的单独应用程序添加到您的服务中,否则您可以将该应用程序放在管理员的启动文件夹中,等等。

哦,最后一件事......还有srvany.exe......它很旧且不受支持,但如果您不打算制作自己的服务,您可能希望将其视为通用服务主机。