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

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

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

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

假设出现问题并且服务器意外重启,我不需要登录就可以启动它。有什么办法吗?

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

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

谢谢

答案1

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

恢复选项

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

基本上,除了我上面描述的内容之外,你还可以做其他事情做错了(TM), 恕我直言。

但为了完整起见,让我们探讨一些可能做错但从技术上仍然可以完成你想要的事情的方法。

假设出现问题并且服务器意外重启,我不需要登录就可以启动它。有什么办法吗?

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

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

这没有意义。如果进程仍在运行,那么它就没有崩溃。如果它悬挂因为您的代码中做错了什么,例如缺少异常处理,这只是您需要在代码中修复的内容。

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

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

不会发生 -除非您听取我的建议,制作一个单独的应用程序,专门设计为管理/监控界面到您的服务中,然后您可以将该应用程序粘贴在管理员的启动文件夹中,等等。

哦,还有最后一件事......还有srvany.exe......它很旧并且不受支持,但如果您不打算自己提供服务,您可能需要将其作为通用服务主机进行研究。

答案2

由于您提到了控制台窗口,因此我假设您的应用程序是命令行应用程序。

如果是这种情况,您可以从批处理文件启动它,如下所示:

:top
the_game_server.exe
goto top

我想即使它不是一个命令行应用程序,理论上也可以正常工作。

让应用程序在崩溃后继续运行可能更棘手。这取决于崩溃时发生的情况。例如,窗口可能会弹出一个模式对话框,告诉您应用程序以不寻常的方式告诉运行时中止或类似情况。如果您需要某种方式来单击对话框按钮,AutoHotkey 可能是一个不错的选择。

这不像创建服务那样优雅。如果应用程序源不可用,我就会这样做,我只需要让它工作。

相关内容