Войти

Показать полную графическую версию : [решено] Скрипт запуска программ по времяни


Страниц : [1] 2 3

p.igor.kin
29-06-2017, 12:42
Добрый день. Прошу прощения если пишу не в ту ветку форума. Нужна ваша помощь в написании скрипта который мог бы запускать определенный exe файл в зависимости от времени на компьютере. К сожалению я сам работал очень мало со скриптами и сам написать такой не смогу

Подробнее о задаче: допустим включается компьютер с 8 утра и до 5 вечера в любое время в этот момент должен запуститься файл 1.exe, и он же должен сам закончить свое выполнение часов в 16:30 а Если компьютер включается с 0 часов до 7 утра то должен запуститься файл 2.exe. и так же закончить свое выполнение часов в 6 утра. Предполагается что данный скрипт будет запускаться планировщиком задач при включении компьютера. оба файла лежат по пути (C:\Program Files\cpustats)

Помогите пожалуйста. Очень нужно для работы

Если нужны доп. данные пишите. Заранее большое спасибо

alpap
29-06-2017, 12:57
p.igor.kin,
в том же планировщике делаете задачу на запуск 1.exe вместе с вкл компа и завершить задачу в 16:30
по аналогии для 2.exe

p.igor.kin
29-06-2017, 13:07
в том же планировщике делаете задачу на запуск 1.exe вместе с вкл компа и завершить задачу в 16:30
по аналогии для 2.exe »


Извините пожалуйста а как сделать в планировщике 1 задачу для старта при включении компа и завершить её в 16:30 так что бы эта задача работала каждый день? Там есть такой пункт завершить задачу но там ставиться число и время, тоесть эта задача отработает 1 раз

И самое главное как в планировщике задать запуск 1.exe с 8 до 17 в любове время и запуск 2.exe с 0 до 7 ?

p.igor.kin
29-06-2017, 13:51
Не понимаю. Запускать при включении? Или после включения в неопределённое случайное время? »

Компьютер может быть включен как в 8 часов так в 9,10, 11 и т.д. Дак вот нужно что бы скрипт запускался при включении компьютера(это я планирую сделать через планировщик или поставить тупо в автозагрузку) Дальше скрипт должен смотреть сколько времени на компьютере и уже в зависимости от времени запускать файл либо 1.exe либо 2.exe

Busla
29-06-2017, 15:04
p.igor.kin, если компьютер включили до восьми часов, 1.exe вообще не должен запускаться?

alpap
29-06-2017, 19:10
как в 8 часов так в ..»
а сколько времени нужно для работы, например, 1.exe, если компьютер включили в 16:25, хватит 5ти минут ему, ведь в 16:30 он должен быть остановлен и вопрос Busla тоже актуален.

megaloman
29-06-2017, 21:24
p.igor.kin, В Вашей проблеме 2 задачи.
1. В зависимости от времени включения компьютера необходимо при включении запустить ту или иную программу. Это делает один скрипт и это одна задача в планировщике при включении.
2. В заданное время необходимо завершить указанную программу. Это сделает другой скрипт и это вторая задача планировщика. Если таких программ несколько, то на завершение каждой необходимо задание в планировщике на каждую задачу.
ИМХО, проще это реализовать vbs-скриптами.
ProgStart = Array("C:\Windows\System32\mspaint.exe", "08:00:00", "16:30:00", _
"C:\Windows\System32\notepad.exe", "00:00:00", "06:00:00")

Set WShell = CreateObject("WScript.Shell")

N1 = LBound(ProgStart)
N2 = UBound(ProgStart)
NProg = (N2 - N1 + 1) / 3

For i = 1 To NProg
PrgName = ProgStart(N1 + 3 * (i - 1))
TBeg = TimeValue(ProgStart(N1 + 1 + 3 * (i - 1)))
TEnd = TimeValue(ProgStart(N1 + 2 + 3 * (i - 1)))
If TBeg <= Time() And Time() <= TEnd Then
WShell.Run PrgName, 7, False
End If
Next
Пропишите вместо моих примеров реальные экзешники и диапазоны времени запуска. Сохраните скрипт в файл с расширением .vbs, например, Starter.vbs. Создайте на него задание в планировщике.
Возможно, в планировщике его надо запускать как, например:
C:\Windows\System32\wscript.exe Диск:\Путь\Starter.vbsSet Arg = WScript.Arguments
If Arg.Count = 0 Then WScript.Quit

Set WMI = GetObject("winMgmts:")
SQuery = "Select *From Win32_Process Where Name=" + """" + Arg(0) + """"

Set Processes = WMI.ExecQuery(SQuery)
If Processes.Count = 0 Then WScript.Quit

On Error Resume Next
For Each Process In Processes
Process.Terminate
Next
On Error GoTo 0
Сохраните скрипт в файл с расширением .vbs, например, ProgKill.vbs. Запускать его надо с параметром, например:
Диск:\Путь\ProgKill.vbs "notepad.exe".
Создайте на него задание в планировщике на нужное время.
Возможно, в планировщике его надо запускать как, например:
C:\Windows\System32\wscript.exe Диск:\Путь\ProgKill.vbs "notepad.exe"
На каждую программу задание в планировщикеа Если компьютер включается с 0 часов до 7 утра то должен запуститься файл 2.exe. и так же закончить свое выполнение часов в 6 утра »
В Вашей постановке нет логики: если, согласно утверждению, задача запустится в 6час 1 мин, то её никаким образом не убить в 6 часов :)
Поэтому надо чётко продумать хронологию событий: нельзя запускать программу после того, как Вы декларировали её завершение.

megaloman
30-06-2017, 14:09
p.igor.kin, Пытаюсь переосмыслить постановку, чтобы ограничиться одним скриптом и одним заданием в планировщике:
С 8 утра и до 16.30 вечера должна обязательно выполняться программа 1.exe, до 8.00 и после 17.00 её не должно быть.
Таких программ может быть несколько со своими интервалами работы и временем завершения.
' Путь к .exe начало конец завершить
ProgStart = Array("C:\Windows\System32\mspaint.exe", "08:00:00", "16:30:00", "17:00:00", _
"C:\Windows\System32\notepad.exe", "00:00:00", "06:00:00", "06:30:00")

ErrTime = 30 ' Время отображения сообщения об ошибке сек.

Set WShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WMI = GetObject("winMgmts:")

N1 = LBound(ProgStart)
N2 = UBound(ProgStart)
NProg = (N2 - N1 + 1) / 4

For i = 1 To NProg
PrgName = ProgStart(N1 + 4 * (i - 1))
If FSO.FileExists(PrgName) Then
ExeName = FSO.GetFileName(PrgName)
TBeg = TimeValue(ProgStart(N1 + 1 + 4 * (i - 1)))
TEnd = TimeValue(ProgStart(N1 + 2 + 4 * (i - 1)))
Term = TimeValue(ProgStart(N1 + 3 + 4 * (i - 1)))

SQuery = "Select *From Win32_Process Where Name=" + """" + ExeName + """"
Set Processes = WMI.ExecQuery(SQuery)

If Processes.Count = 0 Then
If TBeg <= Time() And Time() <= TEnd Then
WShell.Run """" + PrgName + """", 7, False
End If
Else
If Time() >= Term Or Time() < TBeg Then
On Error Resume Next
For Each Process In Processes
Process.Terminate
Next
On Error GoTo 0
End If
End If
Else
LL = WShell.Popup("Отсутствует файл" + vbCrLf + PrgName, ErrTime, "Ошибка при запуске программы", 48)
End If
Next


бремени, времени, семени, темени, пламени, стремени, знамени, племени, имени, вымени

p.igor.kin
17-07-2017, 10:48
Друзья простите пожалуйста за долгое отсутствие уезжал в отпуск. Посмотрел то что вы тут накидали (варианты,идеи) не очень конечно понял. Может я так плохо объяснил а может скрипт такой сложный. Давайте поступим немного по другому.

Задача: Пользователь включает компьютер (это может быть в любое время) Нужен скрипт который при включении компьютера будет смотреть сколько времени на компьютере и будет запускать нужную программу. Предполагается что данный скрипт будет лежать по пути (C:\Program Files\cpustats и иметь название cpustats.vbs) и в планировщике будет создана задача:

Тригер: при запуске системы
Действие: запуск программы (C:\Program Files\cpustats\cpustats.vbs)

Условия запуска программ:

Если время с 8:00 до 18:00 то запустить программу (C:\Program Files\cpustats\dau\cpustats.exe)
Если время с 20:00 до 6:00 то запустить программу (C:\Program Files\cpustats\night\cpustats.exe)

На данный момент воспользовался скриптом пользователя megaloman за что ему огромное спасибо. ниже выкладываю поправленый скрипт под мои условия. Сохранил его как cpustats.vbs

ProgStart = Array("C:\Program Files\cpustats\dau\cpustats.exe", "08:00:00", "18:00:00", _
"C:\Program Files\cpustats\night\cpustats.exe", "20:00:00", "06:00:00")

Set WShell = CreateObject("WScript.Shell")

N1 = LBound(ProgStart)
N2 = UBound(ProgStart)
NProg = (N2 - N1 + 1) / 3
For i = 1 To NProg
PrgName = ProgStart(N1 + 3 * (i - 1))
TBeg = TimeValue(ProgStart(N1 + 1 + 3 * (i - 1)))
TEnd = TimeValue(ProgStart(N1 + 2 + 3 * (i - 1)))
If TBeg <= Time() And Time() <= TEnd Then
WShell.Run PrgName, 7, False
End If
Next

Но при его запуске получаю ошибку: (Если я правильно понял ругается на строку WShell.Run PrgName, 7, False)
http://f5.s.qip.ru/~K06fF9xq.png

p.igor.kin
17-07-2017, 15:20
Файлы точно лежат в папке C:\Program Files\cpustats\dau и C:\Program Files\cpustats\night\cpustats.exe)


Команда dir "C:\Program Files\cpustats\dau\cpustats.exe" :

C:\Users\----------->dir "C:\Program Files\cpustats\dau\cpustats.exe"
Том в устройстве C не имеет метки.
Серийный номер тома: 2A14-D888

Содержимое папки C:\Program Files\cpustats\dau

29.04.2017 16:25 270*336 cpustats.exe
1 файлов 270*336 байт
0 папок 64*124*461*056 байт свободно

Скрипт поправил как вы сказали, но все равно не работает(

ProgStart = Array("C:\Program Files\cpustats\dau\cpustats.exe", "08:00:00", "18:00:00", _
"C:\Program Files\cpustats\night\cpustats.exe", "20:00:00", "23:59:59", _
"C:\Program Files\cpustats\night\cpustats.exe", "00:00:00", "06:00:00")

Set WShell = CreateObject("WScript.Shell")

N1 = LBound(ProgStart)
N2 = UBound(ProgStart)
NProg = (N2 - N1 + 1) / 3
For i = 1 To NProg
PrgName = ProgStart(N1 + 3 * (i - 1))
TBeg = TimeValue(ProgStart(N1 + 1 + 3 * (i - 1)))
TEnd = TimeValue(ProgStart(N1 + 2 + 3 * (i - 1)))
If TBeg <= Time() And Time() <= TEnd Then
WShell.Run PrgName, 7, False
End If
Next

p.igor.kin
17-07-2017, 16:15
C:\Users\----------->dir "C:\Program Files\cpustats\night\cpustats.exe"
Том в устройстве C не имеет метки.
Серийный номер тома: 2A14-D888

Содержимое папки C:\Program Files\cpustats\night

29.04.2017 16:25 270*336 cpustats.exe
1 файлов 270*336 байт
0 папок 63*862*890*496 байт свободно

megaloman
17-07-2017, 16:50
p.igor.kin, ProgStart = Array("C:\Program Files\cpustats\dau\cpustats.exe", "08:00:00", "18:00:00", _
"C:\Program Files\cpustats\night\cpustats.exe", "20:00:00", "23:59:59", _
"C:\Program Files\cpustats\night\cpustats.exe", "00:00:00", "06:00:00")

Set WShell = CreateObject("WScript.Shell")

N1 = LBound(ProgStart)
N2 = UBound(ProgStart)
NProg = (N2 - N1 + 1) / 3

On Error Resume Next
For i = 1 To NProg
PrgName = ProgStart(N1 + 3 * (i - 1))
TBeg = TimeValue(ProgStart(N1 + 1 + 3 * (i - 1)))
TEnd = TimeValue(ProgStart(N1 + 2 + 3 * (i - 1)))
On Error Resume Next
If TBeg <= Time() And Time() <= TEnd Then
LL = WShell.Run("""" + PrgName + """", 7, False)
If Err.Number <> 0 Then
Set FSO = CreateObject("Scripting.FileSystemObject")
Msg = ""
If Not FSO.FileExists(PrgName) Then Msg = vbCrLf + "Файл не найден" + vbCrLf
LL = WShell.Popup("Обратитесь в техподдержку" + vbCrLf + PrgName + Msg + vbCrLf + CStr(TBeg) + " " + CStr(TEnd) + " " + CStr(Time()) + vbCrLf + "Код ошибки " + CStr(Err.Number) + vbCrLf + Err.Description, 3600, "Программа не запускается", 16)
WScript.Quit
End If

End If
Next
On Error GoTo 0

p.igor.kin
17-07-2017, 17:00
Выходит CMD окно в котором написано

failed to open config file config.txt
Press any key to exit

Немнго поясню при запуске программы cpustats.exe он цепляет конфигурацию с файла config.txt который лежит в папке с программой. Судя по всему Программа пытаеться запуститься но не цепляет данный файл. В ручную всю запускается и работает нормально.

p.igor.kin
17-07-2017, 17:04
p.igor.kin, Эта программа запускается в командном окне? Её надо запускать находясь в папке с Exe? »

Да извиняюсь что не уточнил сразу. Думал не критично

megaloman
17-07-2017, 17:26
ProgStart = Array("C:\Program Files\cpustats\dau\cpustats.exe", "08:00:00", "18:00:00", _
"C:\Program Files\cpustats\night\cpustats.exe", "20:00:00", "23:59:59", _
"C:\Program Files\cpustats\night\cpustats.exe", "00:00:00", "06:00:00")

Set WShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

N1 = LBound(ProgStart)
N2 = UBound(ProgStart)
NProg = (N2 - N1 + 1) / 3

On Error Resume Next
For i = 1 To NProg
PrgName = ProgStart(N1 + 3 * (i - 1))
TBeg = TimeValue(ProgStart(N1 + 1 + 3 * (i - 1)))
TEnd = TimeValue(ProgStart(N1 + 2 + 3 * (i - 1)))
On Error Resume Next
If TBeg <= Time() And Time() <= TEnd Then
WShell.CurrentDirectory = FSO.GetFile(PrgName).ParentFolder
LL = WShell.Run("""" + PrgName + """", 7, False)
If Err.Number <> 0 Then
Msg = ""
If Not FSO.FileExists(PrgName) Then Msg = vbCrLf + "Файл не найден" + vbCrLf
LL = WShell.Popup("Обратитесь в техподдержку" + vbCrLf + PrgName + Msg + vbCrLf + CStr(TBeg) + " " + CStr(TEnd) + " " + CStr(Time()) + vbCrLf + "Код ошибки " + CStr(Err.Number) + vbCrLf + Err.Description, 3600, "Программа не запускается", 16)
WScript.Quit
End If

End If
Next
On Error GoTo 0

p.igor.kin
18-07-2017, 09:39
Уважаемый megaloman огромное Вам человеческое спасибо. При запуске Вашего скрипта программа удачно запускается. Проблема осталось только в том что ни как не могу запустить её в планировщике windows 7. Пробовал и C:\Windows\System32\wscript.exe C:\Program Files\cpustats\cpu.vbs и wscript.exe C:\Program Files\cpustats\cpu.vbs и просто C:\Program Files\cpustats\cpu.vbs. Планировщик ни в какую не хочет выполнять данный скрипт( Пишет задача выполняется а ни чего не происходит:(

И ещё скажите пожалуйста я смотрю вы в скрипте сделали проверку на ошибки я попробовал переименовать папку и точно вышла ошибка "обратитесь в тех поддержку". Нельзя ли это убрать? Тоесть если все хорошо скрипт молча запустился и запустил программу, а если что то не так скрипт просто запустился и молча закрылся. И ещё я заметил что скрипт постоянно висит в диспетчере задач. Тоесть он постоянно работает. Можно как нибудь сделать что бы после запуска нужной программы скрипт закрывал сам себя. Извините если прошу слишком многого. Вы и так мне очень сильно помогли. Спасибо!

Iska
18-07-2017, 10:07
Пробовал и C:\Windows\System32\wscript.exe C:\Program Files\cpustats\cpu.vbs и wscript.exe C:\Program Files\cpustats\cpu.vbs и просто C:\Program Files\cpustats\cpu.vbs. »
Попробуйте обрамить пути с пробельными символами кавычками.

Iska
18-07-2017, 10:50
p.igor.kin, Вы уверены, что не запускается именно скрипт?

p.igor.kin
18-07-2017, 11:02
p.igor.kin, Вы уверены, что не запускается именно скрипт? »

Я не вижу запускается он или нет. Но программа которую должен запускать скрипт не запускается 100%. Тоесть варианта тут 2

1) скрипт не запускается
2) скрипт запускается но уже ему не хватает прав на запуск программы

p.s проделал такой опыт. переименовал папку где лежит программа. Запустил скрипт руками и получил ошибку. Тут все верно. Сделал задание в планировщике с выполнять вне зависимости регистрации пользователя запустил задачу и не получил ни чего. Ни ошибки ни запуска программы.

Перепробовал все что только можно все работает только при "выполнять только для зарегистрированного пользователя" А мне это не подходит(

p.igor.kin
18-07-2017, 12:45
Друзья помогите пожалуйста довести до ума поставленную задачу. Заранее всем спасибо! При ручном запуске скрипт полностью работает как надо, а через планировщик не хочет :(

ProgStart = Array("C:\Program Files\cpustats\dau\cpustats.exe", "08:00:00", "18:00:00", _
"C:\Program Files\cpustats\night\cpustats.exe", "20:00:00", "23:59:59", _
"C:\Program Files\cpustats\night\cpustats.exe", "00:00:00", "06:00:00")

Set WShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

N1 = LBound(ProgStart)
N2 = UBound(ProgStart)
NProg = (N2 - N1 + 1) / 3

On Error Resume Next
For i = 1 To NProg
PrgName = ProgStart(N1 + 3 * (i - 1))
TBeg = TimeValue(ProgStart(N1 + 1 + 3 * (i - 1)))
TEnd = TimeValue(ProgStart(N1 + 2 + 3 * (i - 1)))
On Error Resume Next
If TBeg <= Time() And Time() <= TEnd Then
WShell.CurrentDirectory = FSO.GetFile(PrgName).ParentFolder
LL = WShell.Run("""" + PrgName + """", 7, False)
If Err.Number <> 0 Then
Msg = ""
If Not FSO.FileExists(PrgName) Then Msg = vbCrLf + "Файл не найден" + vbCrLf
LL = WShell.Popup("Обратитесь в техподдержку" + vbCrLf + PrgName + Msg + vbCrLf + CStr(TBeg) + " " + CStr(TEnd) + " " + CStr(Time()) + vbCrLf + "Код ошибки " + CStr(Err.Number) + vbCrLf + Err.Description, 3600, "Программа не запускается", 16)
WScript.Quit
End If

End If
Next
On Error GoTo 0




© OSzone.net 2001-2012