Показать полную графическую версию : Запуск команды после полной прогрузки службы.
У меня уже мозг взрывается над следующей задачей:
Мне необходимо запускать программу с правами администратора в ограниченной учётной записи, причём из автозагрузки. Проблема в том, что служба «seclogon» не успевает прогрузиться и скрипт, в котором происходит запуск программы через RunAs не срабатывает.
Может есть команда для Bat, Vbs, Autoit, которая может исполняться в ограниченной учётной записи, которая бы отслеживала подгрузку службы seclogon и только после этого продолжала работу?
Рекомендация использовать паузу не оптимальна, хотелось бы запуск именно как только это становится возможным. И через планировщик тоже не вариант запускать т.к. он вырезан в той сборке Windows XP, которая используется.
Проблема в том, что служба «seclogon» не успевает прогрузиться и скрипт, в котором происходит запуск программы »
Что мешает сделать в скрипте ожидание запуска службы или её непосредственный запуск?
через RunAs »
Никогда не делайте так. Это огромная дыра в безопасности. Если уж никак иначе нельзя — используйте что-нибудь наподобие AdmiLink & AdmiRun (http://admilink.narod.ru/admilink.htm) и т.п.
Вызов команды net start seclogon из под ограниченной учётной записи вываливается с ошибкой по причине нехватки прав, в учётной записи администратора команда отрабатывается и действительно ждёт запуска службы. Но мне необходима реализация именно из под ограниченной учётной записи.
А ожидание старта сервиса какой командой делается и будет ли оно работать в учётной записи с ограниченными правами? Я активно гуглил, но ничего такого так и не встретил.
И я использую не чисто RunAs, а приложение cpau, но эта утилита и ей подобные программы всё равно не будут работать, пока системная служба seclogon не будет запущена.
--- Дополнение---
Я тут в очередной раз поискал команду, которая бы ждала запуска службы, но такой команды вроде как нет. Но я подумал над скриптом, который бы мог работать в ограниченной учётной записи со следующим финтом:
--- Отслеживать в памяти раз в секунду имя запускаемой программы (program.exe)
------- её нет? Тогда запускаем команду cpau -dec -lwp -file C:\start-program.job (это контейнер с зашифрованными логином и паролем, а также расположением запускаемого файла для runas)
------------- программа (program.exe) не появилась через 3 секунды? Тогда убиваем процесс cpau.exe и вновь переходим к отслеживанию.
--- программа появилась в оперативной памяти? Завершаем работу скрипта.
Пояснение про 3 секунды после старта cpau: после запуска в случае успешной подгрузки службы «seclogon» практически моментально стартует заданную программу с правами админа, а если в момент запуска служба всё ещё недоступна, то она будет висеть и к моменту прогрузки службы выдаст ошибку.
Вот только моих любительских знаний не хватит для написания такого скрипта. Буду признателен за помощь .
Попробуй в цикле команду
C:\Users\administrator>sc query seclogon
SERVICE_NAME: seclogon
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 1 STOPPED
WIN32_EXIT_CODE : 1077 (0x435)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
и проверяй STATE.
возможно она не требует админских прав.
megaloman
26-07-2016, 10:25
DjBoBo, "Тупо" реализовал Ваш алгоритм в Дополнении в vbsProg1 = "program.exe"
Prog2 = "cpau -dec -lwp -file C:\start-program.job"
Time1 = 1 * 1000 ' Время 1 паузы (1 сек)
Time2 = 3 * 1000 ' Время 1 паузы (3 сек)
Set WMI = GetObject("winMgmts:")
Set WShell = CreateObject("WScript.Shell")
SQuery1 = "Select *From Win32_Process Where Name=" + """" + Prog1 + """"
SQuery2 = "Select *From Win32_Process Where Name=" + """" + Prog2 + """"
WScript.Sleep Time1
Do
Set Proc2 = WMI.ExecQuery(SQuery2)
For Each Process In Proc2 ' Убиваем вторую
Process.Terminate
Next
Set Proc1 = WMI.ExecQuery(SQuery1)
If Proc1.Count = 0 Then ' Если нет первой программы
Sending = WShell.Run(Prog2, 2, False) ' Запускаем вторую
Else
Exit Do
End If
WScript.Sleep Time2
Loop Обратите внимание, что программы указаны без путей. Если для запуска надо пути, их придётся добавить к именам программ при вызове в методе Run
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.