Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
sajokarife
Заблокирован
#1

Как реализовать в скрипте следующий функционал? - CMD/BAT

24.07.2016, 14:28. Просмотров 310. Ответов 4
Метки нет (Все метки)

Хотел реализовать запуск программы от администратора из ограниченной учётной записи, причём из автозагрузки. Но проблема в том, что сервис «seclogon» не успевает к моменту старта подгрузиться и штатная функция RunAs не срабатывает. Рекомендация использовать паузу не оптимальна, хотелось бы запуск именно как только это становится возможным. И через планировщик тоже не вариант запускать т.к. он вырезан в той сборке Windows XP, которая используется.

Я долго гуглил, что можно придумать в ограниченной учётной записи, и пришёл к такой скриптовой конструкции:

--- Отслеживать в памяти раз в секунду имя запускаемой программы (program.exe)
------- её нет? Тогда запускаем команду cpau -dec -lwp -file C:\start-program.job (это контейнер с зашифрованными логином и паролем, а также расположением запускаемого файла для runas)
------------- программа (program.exe) не появилась через 3 секунды? Тогда убиваем процесс cpau.exe и вновь переходим к отслеживанию.
--- программа появилась в оперативной памяти? Завершаем работу скрипта.

Пояснение про 3 секунды после старта cpau: после запуска в случае успешной подгрузки службы «seclogon» практически моментально стартует заданную программу с правами админа, а если в момент запуска служба всё ещё недоступна, то она будет висеть и к моменту прогрузки службы выдаст ошибку.

Вот только моих любительских знаний не хватит для написания такого скрипта. Буду признателен за помощь .
http://www.cyberforum.ru/cmd-bat/thread376146.html
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2016, 14:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как реализовать в скрипте следующий функционал? (CMD/BAT):

Как реализовать функционал на 1С Предприятие 8.2?
Привет, изучаю 1С и стараюсь писать свою конфигурацию про медицинскую клинику,...

Подскажите, как реализовать подобный функционал
Добрый день, друзья! Подскажите, как реализовать такой функционал как здесь...

Нужна подсказка как реализовать заданный функционал в игре
Добрый день! Создаю игру в visual studio 2015 c++ с помощью sfml. Смысл игры...

Как реализовать следующий ввод на C# ?
Входные данные В первой строке входных данных содержится число n (1 ≤ n ≤ 100)...

Как реализовать систему нашёл предмет=можешь переходить на следующий уровень?
Здравствуйте, друзья. Хочу в 2д платформере сделать сделать простую систему, в...

4
mir16
86 / 80 / 42
Регистрация: 27.09.2015
Сообщений: 314
24.07.2016, 15:42 #2
Лучший ответ Сообщение было отмечено sajokarife как решение

Решение

Windows Batch file
1
2
3
4
5
6
7
8
9
@echo off
setlocal
:loop
tasklist |find /i "program.exe" >nul&&goto:eof || (
 start "" "cpau -dec -lwp -file C:\start-program.job"
 >nul timeout /t 3 /nobreak
 taskkill /im cpau.exe /f
)
goto:loop
Добавлено через 1 минуту
нет.. я неправильно сделал

Добавлено через 8 минут
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
setlocal
:refresh
set counter=0
:loop
tasklist |find /i "program.exe" >nul&&goto:eof || (
 if %counter% == 0 (
  start "" "cpau -dec -lwp -file C:\start-program.job"
 )
 if %counter% == 2 (
  taskkill /im cpau.exe /f
  goto:refresh
 )
 set /a counter+=1
 >nul timeout /t 1 /nobreak
)
goto:loop
1
sajokarife
Заблокирован
24.07.2016, 23:06  [ТС] #3
mir16
Большое спасибо. Только я убрал кавычки (в ином случае выскакивало что невозможно найти фаил):
Windows Batch file
7
8
9
 if %counter% == 0 (
  start CPAU /dec /lwp /file "C:\WINDOWS\system32\driver.job"
 )
Честно говоря не знаю логики, а может скрипт работает не совсем верно из-за выжидания службы, но поведение его следующее:
При запуске в оперативной памяти появляются процессы find.exe и tasklist.exe и ничего не происходит до момента прогрузки службы «seclogon». В этот момент запускается CPAU и стартует заданную программу. После чего скрипт прописывает что timeout не является внутренней или внешней программой и закрывается. В случае повторного (в ручную) запуска скрипт определяет наличие нужного процесса в памяти и сразу завершает свою работу без каких либо действий. Всё работает и в ограниченной учётной записи.

Формально всё работает совершенно верно, просто интересно почему так, по коду вроде должен пытаться стартовать CPAU, но делает он это именно в момент прогрузки службы. Чудеса :-)
0
mir16
86 / 80 / 42
Регистрация: 27.09.2015
Сообщений: 314
27.07.2016, 01:55 #4
Цитата Сообщение от sajokarife Посмотреть сообщение
появляются процессы find.exe и tasklist.exe и ничего не происходит до момента прогрузки службы «seclogon». В этот момент запускается CPAU
Цитата Сообщение от http://www.joeware.net/freetools/tools/cpau/
Command line tool for starting process in alternate security context. Basically this is a runas replacement...
я не знаю, но быть может cpau, для работы, тоже нужен seclogon.. т.к. он является заменой штатного runas, которому, по вашим словам, нужен seclogon.
timeout не является.. программой, возможно потому, что в вашей системе его нет.. можно установить.

Добавлено через 11 минут
точно.. у вас-же xp.. как-ж я так заигнорил сей момент..
секундная задержка при помощи vbs
Windows Batch file
1
if not exist %appdata%\sleep.vbs (>%appdata%\sleep.vbs echo WScript.Sleep 1000 & %appdata%\sleep.vbs)
Добавлено через 7 минут
скобочки не так расставил в предыдущем
Windows Batch file
1
(if not exist %appdata%\sleep.vbs (>%appdata%\sleep.vbs echo WScript.Sleep 3000)) & %appdata%\sleep.vbs
1
sajokarife
Заблокирован
27.07.2016, 13:02  [ТС] #5
mir16
Спасибо за пояснение :-) Вообще, конечно, CPAU необходима служба «seclogon», но непрогруженность службы в момент запуска никак не мешала ей появляться в процессах и висеть там, а тут даже попыток запуска не было.
Вроде как я нашёл причину, команда
Windows Batch file
tasklist |find /i "program.exe"
исполняется после прогрузки оставшихся служб (вполне возможно что «seclogon» не единственная прогружающаяся служба).
Вообще эта задержка с прогрузкой служб наблюдается только при включённом сетевом соединении. Если его отключить, то к моменту загрузки рабочего стола уже все службы работают в штатном режиме.
Вот такие странности в работе.
0
27.07.2016, 13:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2016, 13:02
Привет! Вот еще темы с решениями:

Нужно реализовать данный функционал в js
Доброго времени, помогите (направьте), как решить данную задачу с помощью js. В...

Задача на функционалы - реализовать функционал filter
Напишите функцию (filter p x), которая создает список из элементов списка х,...

Определить класс Car и реализовать его функционал
Здравствуйте,помогите,пожалуйста с задачей Определить класс Car,который...

Создать класс, интерфейс к нему и реализовать функционал
Нужна помощь в написании программы. Класс точек. Базовый класс (точки в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru