【发布时间】:2014-07-15 21:28:01
【问题描述】:
我需要一些帮助。所有的变量都在下面。希望有人可以帮助阐明这个问题。
环境:
我在 Windows 域上运行的 Windows Server 2003 VM 机器上运行专有处理软件。
基本上这个软件是一个可执行文件,它是从域帐户手动运行的(登录并手动打开桌面上的快捷方式)
问题/目标:
该软件作为命令提示符运行,并且每隔一段时间(几天)它就会在没有警告的情况下关闭。我们通过Nagios 监控和VNC 收到警报并再次启动该过程。该服务器正在生产中,这不实用。我们正在尝试使用一个脚本来检查进程并在它没有运行时启动它。
尝试的解决方案 - 我们已经尝试了很多东西,只是为了记录:
-
我们将此进程转换为 Windows 服务,但由于软件的性质,它不能作为服务运行。
-
我们尝试使用 Nagios 脚本重启服务,但是关键字 service 这个软件不能作为服务运行,所以这不是一个选项。
-
我们尝试了一个名为ReStartMe 的程序。它对我们不起作用;它使软件崩溃。
最有希望的解决方案:
我们在网上找到了一个重启应用脚本,它确实会重启应用。但是,应用程序无法正常启动、停止、关闭,然后不断地重新启动。
我们认为这是因为应用程序在 shell 中启动,并且可能没有适当的用户权限来运行可执行文件。它不等同于经过身份验证的用户在桌面上打开。
此脚本的代码粘贴在下面。我们希望有人可以帮助我们了解这一点。解决这个问题将为我们省去很多麻烦。
重启程序脚本:
set Service = GetObject ("winmgmts:")
set Shell = WScript.CreateObject("WScript.Shell")
'Name of the EXE file we want to watch
sEXEName = "processing.exe"
'Path of the folder it is in (Don't forget the trailing \)
sApplicationPath = "C:\process\"
'Loop until the system is shutdown or user logs out
while true
bRunning = false
'Look for our application. Set the flag bRunning = true
'If we see that it is running
for each Process in Service.InstancesOf ("Win32_Process")
if Process.Name = sEXEName then
bRunning=true
End If
next
'Is our application running?
if (not bRunning) then
'No it is not, launch it
Shell.Run Chr(34) & sApplicationPath & sEXEName & Chr(34)
end if
'Sleep a while so we do not hog the CPU
WScript.Sleep(2000)
wend
【问题讨论】:
-
如果经过身份验证的用户运行脚本的方式与他或她运行应用程序的方式相同,那么这不是权限问题。可能与当前目录有关。尝试让脚本启动应用程序的快捷方式(与您手动启动应用程序相同的快捷方式)而不是可执行文件本身。
标签: windows vbscript cmd basic