Windows 2000 Server自动重新启动脚本

我在一个运行在异地的过时的服务器操作系统(Win2k Web Server)上运行一个传统的networking应用程序。 该应用程序是一个商业(即我没有源)的产品已被开发商中止,但我的公司仍然依赖于它,因为没有更好的产品在市场上这个极端利基的产品。 问题是,它每隔几天崩溃,并总是在最糟糕的时间(周末,凌晨3点等),我必须通过RDClogin到服务器,并重新启动服务器,手动重新启动应用程序,一旦服务器恢复。 服务器除了托pipe这个应用程序什么都不做 我已经尝试了win2k3,它仍然崩溃,所以一个操作系统的变化将无济于事。

我试图自动化这个服务器重新启动,然后重新启动应用程序,当它发现应用程序已经死亡。 我有一个方法来检测这个应用程序何时死亡,并有能力运行任何types的脚本/ exe文件。 该应用程序不能作为服务运行(我已经尝试了像这样工作,但没有机会)。 它必须在RDC用户的桌面上运行,并且没有办法解决这个问题,因为我需要频繁地在桌面上与它进行交互。 所以:

1:识别应用程序何时死亡(完成)2:完成后自动重启服务器(简单,完成)3:当服务器完成重新启动后,在pipe理员级别的RDC桌面上打开此应用程序。

我正式的问题是:我该怎么做#3?

任何build议将非常欢迎和赞赏。

我会说别人的话,但有点不同,因为我已经做了一些非常糟糕的程序(这两个程序都是时钟的轮询程序 – 这是什么程序民意调查时钟是糟糕的废话?):

  • 以将运行该应用程序的用户身份login到服务器计算机。 设置用户的屏幕保护程序是安全的(即需要密码)。 您应该使用“空白屏幕”来保存CPU。

  • 将快捷方式放置到您的脚本中以启动应用程序,并在“所有用户”“启动”组中testing其“活跃性”。 (确保你的脚本在检查它是否“死亡”之前给应用程序足够的时间来实际启动。)

  • http://www.nirsoft.net/utils/nircmd2.html获取 “nircmd”的副本,并将其放入%SystemRoot%\ System32目录(或任何地方,真的)。 添加一个快捷方式到“所有用户”“启动”组呼叫:

    %SystemRoot%\ system32 \ nircmd.exe屏幕保护程序

  • 添加以下registry值,replace适当的用户名和密码。

     HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon
     AutoAdminLogon  -  REG_SZ  -  1
     DefaultUsername  -  REG_SZ  - 设置为用户名login
     DefaultPassword  -  REG_SZ  - 设置为login密码
     DefaultDomain  -  REG_SZ  - 如果使用本地帐户login,则设置为本地计算机的名称,如果使用域帐户login,则设置为域名。
     ForceAutoLogon  -  REG_SZ  -  1
  • 修改HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon项(使用REGEDT32)的权限以从该项上的ACL删除“超级用户”和“用户”组。 (我只是在一台W2K机器上testing过,并且不会中断自动login)。 这将防止明文密码被有限访问的用户读取。

在这一点上,电脑将启动并自动login为您指定的用户,启动应用程序和你的“死”脚本,并立即进入一个locking屏幕保护程序。 在启动期间保存的密钥不会停止自动login(但是,由于这是异地,希望他们的键盘/鼠标无论如何保护)。

如果你可以在W2K3上运行它,你可以在远程桌面客户端上使用“/ admin”或者“/ console”参数(取决于你使用哪个版本 – 做一个“/?”来看)连接到控制台会话。 您将需要使用自动login帐户使用的相同用户名和密码login,并且没有该用户名和密码的人将无法连接到控制台会话。

如果您必须坚持在W2K上运行它,请安装类似VNC的东西,以便您可以远程控制控制台会话。 如果您使用VNC,请务必修改存储计算机VNCconfiguration的registry项(HKEY_LOCAL_MACHINE \ Software \ ORL \ Winvnc for旧版本,其他位置为新版本)的权限以删除“Users”和“Power Users “从钥匙的ACL。 这将防止有限访问的用户读取VNC密码散列,这可以很容易地反转回VNC密码。

我就是这么做的

这里的关键是安全 – 简而言之,如果你遵循这些指示,你将不会有任何东西。

步骤是:1.自动login。 2.运行一个(cmd)batch file,在您login时启动您的程序。

对于自动login – 只需使用TweakUI – 这只是一堆registry文件,但TweakUI是写得很好的最好方法。

对于batch file,只需编写一个运行程序的cmd文件,并将其放在“所有用户”目录下的“启动”文件夹中。

这样做会有更复杂的方法,但是这种低技术的机制将会起作用,但是会100%地危及服务器的安全!

麦克风

我们必须在几个站点上执行此操作,并使用Mikebuild议的自动login。

既然你来自Linux背景,也许值得强调的是,自动login会自动提供一个用户名和密码的交互式会话,当服务器启动时,也就是有人坐在服务器上,按下ctrl-alt-delete并在服务器上login。 然后,应用程序从Startup文件夹运行,就像它为任何交互式用户一样。

NB RDC不参与。 这是一个交互式login。

很明显,安全性现在是不存在的,因为任何人都可以走到服务器并开始input。 但是,您可以将屏幕保护程序设置为很短的超时时间,以便快速locking交互式会话。 唯一的安全风险是,如果有人正在观看服务器重新启动,并可以在自动login和屏幕保护程序切入之间的时间抓住它。

JR

把你的应用放在虚拟服务器上怎么样? VMWare或Hyper-V,并使用Mike所描述的自动login?

在发布我的第一个回复之后,我只想到了这一点,但是如果将应用程序放在虚拟服务器中,则可以在交互式会话中运行该应用程序,并且不存在安全风险,因为虚拟机没有键盘和鼠标。

JR

在这种情况下,RDP是stream行的替代scheme,VNC允许您连接到控制台会话,无论它是否已经login。

我相信VNC可以保持适度的安全性,这取决于你使用的是哪个版本,而且是FLOSS。

  • 使用TweakUI来创build一个自动login,一个本地帐户而不是一个域帐户。
  • 在自动login帐户的开始菜单中将应用程序的快捷方式添加到启动组。

您可以尝试TightVNCUltraVNCRealVNCWinVNC