Скрыть cmd.exe
Моя тема немного отличается от иных, а это нужно в планировщике заданий windows 8 запустить .bat файл в скрытом режиме, что бы окно командной строки не мозолило глаза пару секунд, знаю, что для запуска в скрытом режиме программ можно использовать start /b .bat но как это применить в Планировщике? В разделе Действия в пути указал путь к батнику, аргумент указал /b а команду start куда впихнуть?)
Если в батник то у меня велосипед, а не батник в который проверяет запущен ли процесс если нет то запустить
Код:
@echo off
ср1252
tasklist | find /i "1cv8.exe" || start "" /ABOVENORMAL "C:\Program Files\1cv82\8.2.16.352\bin\1cv8s.exe" ENTERPRISE /FD:\–цб /P цб
так как выйти с этой ситуации, куда "прилепить" команду start через план. заданий?!
|
Цитата:
Цитата Ua-life
нужно в планировщике заданий windows 8 запустить .bat файл в скрытом режиме, что бы окно командной строки не мозолило глаза пару секунд, »
|
Задание исполняется от имени текущего пользователя?
Цитата:
Цитата Ua-life
знаю, что для запуска в скрытом режиме программ можно использовать start /b .bat »
|
Не знаете. Параметр «/b» команды «start» означает
читать дальше »
отсутствие флага «CREATE_NEW_CONSOLE» ( Process Creation Flags (Windows)):
Цитата:
CREATE_NEW_CONSOLE 0x00000010
The new process has a new console, instead of inheriting its parent's console (the default). For more information, see Creation of a Console.
This flag cannot be used with DETACHED_PROCESS.
|
т.е., новый процесс будет «наследовать» окно консоли родительского процесса. Не более. Вам, очевидно, нужно совсем не это.
Попробуйте использовать WSH, наподобие (не проверялось):
читать дальше »
Код:
Option Explicit
Const Above_Normal = 32768
Dim objSWbemObjectEx
Dim lngProcessID
With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
If .ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'").Count = 0 Then
Set objSWbemObjectEx = .Get("Win32_ProcessStartup")
objSWbemObjectEx.PriorityClass = Above_Normal
' Create method of the Win32_Process class (Windows) (http://msdn.microsoft.com/en-us/library/aa389388(v=vs.85).aspx)
If .Get("Win32_Process").Create( _
"""C:\Program Files\1cv82\8.2.16.352\bin\1cv8s.exe"" ENTERPRISE /FD:\–цб /P цб", _
"C:\Program Files\1cv82\8.2.16.352\bin", _
objSWbemObjectEx, _
lngProcessID _
) <> 0 Then
WScript.Echo "Can't start process [""%ProgramFiles%\1cv82\8.2.16.352\bin\1cv8s.exe"" ENTERPRISE /FD:\–цб /P цб]."
End If
Set objSWbemObjectEx = Nothing
End If
End With
WScript.Quit 0
Не забудьте поправить кодировку в «… /FD:\–цб /P цб» и указать правильный текущий каталог вместо приведённого в коде «"C:\Program Files\1cv82\8.2.16.352\bin"» во втором параметре метода «.Create()».
|
Цитата:
Цитата Iska
Задание исполняется от имени текущего пользователя? »
|
да под текущим
Цитата:
Цитата Iska
Не знаете. Параметр «/b» команды «start» означает »
|
что тут сказать, как не упс :)
Цитата:
Цитата Iska
Попробуйте использовать WSH, наподобие (не проверялось): »
|
Где то такое видел ... попробую
Цитата:
Цитата Iska
Не забудьте поправить кодировку в «… /FD:\–цб /P цб» и указать правильный текущий каталог вместо приведённого в коде «"C:\Program Files\1cv82\8.2.16.352\bin"» во втором параметре метода «.Create()». »
|
спасибо, буду пробовать.
А что бы через планировщик заделать желаемое никак?
|
Цитата:
Цитата Ua-life
А что бы через планировщик заделать желаемое никак? »
|
Ua-life, я и не предлагаю отказываться от Планировщика. Сохраняете приведённый код в файл с расширением .vbs, поправив указанные выше моменты в коде, затем добавляете путь к сохранённому файлу в Планировщик, ровно так же, как Вы делали бы сие для пакетного файла. По умолчанию будет использоваться хост «wscript.exe», посему окна консоли Вы не увидите. Вам ведь это требовалось?
P.S. Я правильно понял, что речь шла только об окне консоли командного процессора, а окно самого приложения 1С при запуске принудительно скрывать не нужно, так?
|
Цитата:
Цитата Iska
Вам ведь это требовалось? »
|
да, это мне нужно
Цитата:
Цитата Iska
Я правильно понял, что речь шла только об окне консоли командного процессора, а окно самого приложения 1С при запуске принудительно скрывать не нужно, так? »
|
нет, это мне ни к чему
Спасибо вам, буду пробовать, отпишусь о результате
|
Цитата:
Цитата Ua-life
а каким образом мне ваш и мой код совместить?! »
|
Не надо совмещать. Просто сделайте это:
Цитата:
Цитата Iska
Сохраняете приведённый код в файл с расширением .vbs, поправив указанные выше моменты в коде, затем добавляете путь к сохранённому файлу в Планировщик, ровно так же, как Вы делали бы сие для пакетного файла. »
|
Если процесс «1cv8.exe» не существует:
Код:
If .ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'").Count = 0 Then
только тогда он будет создан с повышенным приоритетом.
Не забудьте задать каталог в методе «.Create» и поправить:
Цитата:
Код:
… ENTERPRISE /F D:\ПутьКБазе /N НазваниеПользователя /P ЕгоПароль
|
|
Подставил свои параметры (прошу посмотреть правильно ли)
читать дальше »
Код:
Option Explicit
Const Above_Normal = 32768
Dim objSWbemObjectEx
Dim lngProcessID
With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
If .ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'").Count = 0 Then
Set objSWbemObjectEx = .Get("Win32_ProcessStartup")
objSWbemObjectEx.PriorityClass = Above_Normal
' Create method of the Win32_Process class (Windows) (http://msdn.microsoft.com/en-us/library/aa389388(v=vs.85).aspx)
If .Get("Win32_Process").Create( _
"""C:\Program Files\1cv82\8.2.16.352\bin\1cv8.exe"" ENTERPRISE /FD:\ЦентральнаяБаза /N ЦентральнаБаза /P МойПароль", _
"C:\Program Files\1cv82\8.2.16.352\bin\1cv8.exe", _
objSWbemObjectEx, _
lngProcessID _
) <> 0 Then
WScript.Echo "Can't start process [""%Program Files\1cv82\8.2.16.352\bin\1cv8.exe"" ENTERPRISE /FD:\ЦентральнаяБаза /N ЦентральнаБаза /P МойПароль."
End If
Set objSWbemObjectEx = Nothing
End If
End With
WScript.Quit 0
и последующего запуска появляется
Цитата:
---------------------------
Windows Script Host
---------------------------
Can't start process ["%Program Files\1cv82\8.2.16.352\bin\1cv8.exe" ENTERPRISE /FD:\ЦентральнаяБаза /N ЦентральнаБаза /P МойПароль.
---------------------------
ОК
---------------------------
|
Цитата:
Цитата Iska
If .ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'").Count = 0 Then »
|
не понял, так этот кусок кода и так присутствует в выше приведенном вами коде
|
Уберите зачёркнутое:
Код:
If .Get("Win32_Process").Create( _
"""C:\Program Files\1cv82\8.2.16.352\bin\1cv8.exe"" ENTERPRISE /FD:\ЦентральнаяБаза /N ЦентральнаБаза /P МойПароль", _
"C:\Program Files\1cv82\8.2.16.352\bin\1cv8.exe", _
objSWbemObjectEx, _
lngProcessID _
) <> 0 Then
Второй параметр — должен указывать путь к потребному каталогу, а не к файлу.
Цитата:
Цитата Ua-life
не понял, так этот кусок кода и так присутствует в выше приведенном вами коде »
|
Вы выше спросили, как совместить код. Я ответил, что совмещать не нужно, поскольку код на WSH полностью замещает код указанного пакетного файла, и проиллюстрировал это куском кода.
|
ай красота, скрипт запустился, сейчас попробуем к планировщику его применить
Все работает! Ой какой же я Вам благодарный! Потрясающее! То, что требовалось, если не возражаете приведу выше код в одному из постов в своем блоге?! Огромное спасибо Вам! Очень помогли!
К тому же этот код можно редактировать к другим приложениями которые запускаются в таких же случаях?! :)
|
Цитата:
Цитата Ua-life
если не возражаете приведу выше код в одному из постов в своем блоге?! »
|
Нисколько.
Цитата:
Цитата Ua-life
этот код можно редактировать к другим приложениями которые запускаются в таких же случаях?! »
|
Да.
|
Время: 22:35.
© OSzone.net 2001-