我有一个运行Windows Server 2008 R2的vps。
我有一个总是需要运行的可执行文件。 即使我没有login。
说有问题,服务器意外重新启动,我不应该login它启动。 有没有办法做到这一点?
此外,我不认为这可以做,但应用程序崩溃,有没有办法让操作系统closures崩溃的可执行文件并重新启动?
另外,当我以pipe理员身份进行login时,如果我能看到它正在运行,那也是非常棒的。 (wg:可见控制台窗口)
谢谢
因为这是你的游戏,意味着你拥有这个代码,那么这就意味着你需要把它改写成一个Windows服务。 服务器运行服务。 Windows服务被devise为在没有用户交互的情况下运行,不pipe是否有人login,并且可以在机器启动时自动启动。 (只需将服务设置为“自动”,并在操作系统加载后立即启动。)另外,您可以在服务控制器中定义高级恢复选项,让Windows自动重新启动服务,甚至可以向您发送电子邮件通知你,如果你这么倾向,你的服务已经崩溃了。

您不直接与Windows服务交互。 Windows服务没有用户界面,他们不在桌面上创build一个窗口。 (他们不应该 )当你login时,你不会看到它的控制台窗口。 但是,您可以编写一个单独的应用程序与您的服务进行交互,以允许用户configuration服务的设置或执行pipe理function。 您的pipe理应用程序可能用于设置和读取服务使用的registry项或configuration文件设置等。
基本上,除了我刚才所描述的之外,你做的任何事情都是错误的(TM) ,恕我直言。
但是为了完整起见,我们来探讨一些你可以做错的方法,但是仍然可以在技术上完成你想要的。
说有问题,服务器意外重新启动,我不应该login它启动。 有没有办法做到这一点?
当然。 通过将启动器放在 (对不起,这是用户login。)或者把它放在一个计划任务,configuration为在系统启动时运行。 (当然,如果你使用Windows服务路由,只需要在服务控制器中将服务设置为“自动”。 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run使可执行文件HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 。
说应用程序崩溃,有没有办法让操作系统closures崩溃的可执行文件并重新启动?
这根本不符合逻辑。 如果进程仍在运行,那么它不会崩溃。 如果因为代码中出现错误而导致挂起 ,例如缺lessexception处理,那只是需要在代码中修复的东西。
另一方面,如果您想每5分钟运行一次脚本(通过任务计划程序)来检查FunGame.exe是否正在运行,如果没有运行则启动,然后您可以自由运行。 ..如果你在我的服务器上运行类似的东西,我会恨你的。
另外,当我以pipe理员身份进行login时,如果我能看到它正在运行,那也是非常棒的。 (wg:可见控制台窗口)
不会发生这种情况 – 除非您将我的build议作为专门devise为pipe理员/监控界面的独立应用程序,然后您可以将该应用程序粘贴到pipe理员的启动文件夹中,等等。
哦,还有最后一件事…还有srvany.exe …这是旧的和不支持的,但如果你不打算自己的服务,你可能想把它看作一个通用的服务主机。
我假设你的应用程序是一个命令行应用程序,因为你提到了控制台窗口。
如果是这样的话,你可以从batch file启动它,如下所示:
:top the_game_server.exe goto top
我猜即使这不是一个理论上也能工作的命令行应用程序。
让应用程序在崩溃中生存可能会更棘手。 这取决于崩溃时发生的情况。例如,Windows可能会popup一个模式对话框,告诉您应用程序以不寻常的方式告诉运行时中止。 如果您需要某种方法来单击对话框button,AutoHotkey可能是一个不错的select。
这不像创build服务那样优雅。 如果应用程序来源不可用,这就更像是我要做的事情,而我只是需要使其工作。