У меня есть веб-сервис, работающий в окне cmd на сервере.
У меня нет доступа, чтобы напрямую вмешиваться в него, кроме как войти в окно и зайти вручную (с помощью ctrl + c) и запустить его снова.
Задача состояла в том, чтобы перезапустить его в определенное время. Поэтому для правильного закрытия я выбираю окно, максимизирую его, отправляю ctrl + c, жду, пока не появится всплывающее подтверждение, и подтверждаю нажатием «J» (это не так, это немецкий клиент) и ENTER.
Затем немного подождите и снова запустите его с предоставленной битой.
Вот сценарий:
Set shell = CreateObject("WScript.Shell")
shell.AppActivate "Administrator: WebGui"
wscript.Sleep 5000
shell.SendKeys "% x"
wscript.Sleep 1000
shell.SendKeys "^C"
wscript.Sleep 60000
shell.SendKeys "J"
wscript.Sleep 1000
shell.SendKeys "{ENTER}"
wscript.Sleep 10000
shell.CurrentDirectory = "C:\webapps\web_gui"
shell.Run "runWebGui.bat"
wscript.Sleep 10000
shell.SendKeys "% n"
Вручную все работает, но в тот момент, когда я использую Task-Schedular или скрипт, чтобы сделать это автоматически, кажется, что он не работает.
Здесь скрипт, который я пытался использовать вместо Task-Schedular.
'timer.vbs
Set objShell = Wscript.CreateObject("Wscript.Shell")
Do
Wscript.Sleep 1000
If Time() = TimeValue("6:45:00 AM") Then
objShell.Run "c:\windows\system32\cscript.exe /B /nologo C:\login\g-restart.vbs"
Wscript.echo "Neustart um 6:45 gestartet"
ElseIf Time() = TimeValue("12:00:00 PM") Then
objShell.Run "c:\windows\system32\cscript.exe /B /nologo C:\login\g-restart.vbs"
Wscript.echo "Neustart um 12:00 gestartet"
ElseIf Time() = TimeValue("5:00:00 PM") Then
objShell.Run "c:\windows\system32\cscript.exe /B /nologo C:\login\g-restart.vbs"
Wscript.echo "Neustart um 17:00 gestartet"
End If
Loop
В обоих случаях кажется, что проблема связана с AppActivate и последующей отправкой ключей, когда это не делается вручную. Поскольку нажатие клавиш направляется не к активному окну, а к тому, что находится на переднем плане ...
Итак, я предполагаю, что проблема лежит где-то здесь:
shell.AppActivate "Administrator: WebGui"
wscript.Sleep 5000
shell.SendKeys "% x"
wscript.Sleep 1000
shell.SendKeys "^C"
wscript.Sleep 60000
shell.SendKeys "J"
wscript.Sleep 1000
shell.SendKeys "{ENTER}"
Есть ли простое решение моей проблемы?