Показать полную графическую версию : Скрыть 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 через план. заданий?!
нужно в планировщике заданий windows 8 запустить .bat файл в скрытом режиме, что бы окно командной строки не мозолило глаза пару секунд, »
Задание исполняется от имени текущего пользователя?
знаю, что для запуска в скрытом режиме программ можно использовать start /b .bat »
Не знаете. Параметр «/b» команды «start» означает отсутствие флага «CREATE_NEW_CONSOLE» (Process Creation Flags (Windows) (http://msdn.microsoft.com/en-us/library/windows/desktop/ms684863(v=vs.85).aspx)):
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()».
Задание исполняется от имени текущего пользователя? »
да под текущим
Не знаете. Параметр «/b» команды «start» означает »
что тут сказать, как не упс :)
Попробуйте использовать WSH, наподобие (не проверялось): »
Где то такое видел ... попробую
Не забудьте поправить кодировку в «… /FD:\–цб /P цб» и указать правильный текущий каталог вместо приведённого в коде «"C:\Program Files\1cv82\8.2.16.352\bin"» во втором параметре метода «.Create()». »
спасибо, буду пробовать.
А что бы через планировщик заделать желаемое никак?
А что бы через планировщик заделать желаемое никак? »
Ua-life, я и не предлагаю отказываться от Планировщика. Сохраняете приведённый код в файл с расширением .vbs, поправив указанные выше моменты в коде, затем добавляете путь к сохранённому файлу в Планировщик, ровно так же, как Вы делали бы сие для пакетного файла. По умолчанию будет использоваться хост «wscript.exe», посему окна консоли Вы не увидите. Вам ведь это требовалось?
P.S. Я правильно понял, что речь шла только об окне консоли командного процессора, а окно самого приложения 1С при запуске принудительно скрывать не нужно, так?
Вам ведь это требовалось? »
да, это мне нужно
Я правильно понял, что речь шла только об окне консоли командного процессора, а окно самого приложения 1С при запуске принудительно скрывать не нужно, так? »
нет, это мне ни к чему
Спасибо вам, буду пробовать, отпишусь о результате
Пришел на работу и ко мне тут дошло, а каким образом мне ваш и мой код совместить?!
http://copyraite.blogspot.com/2013/11/blog-post.html вот мое решение, буду признателен, запутался
а каким образом мне ваш и мой код совместить?! »
Не надо совмещать. Просто сделайте это:
Сохраняете приведённый код в файл с расширением .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 МойПароль.
---------------------------
ОК
---------------------------
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
Второй параметр — должен указывать путь к потребному каталогу, а не к файлу.
не понял, так этот кусок кода и так присутствует в выше приведенном вами коде »
Вы выше спросили, как совместить код. Я ответил, что совмещать не нужно, поскольку код на WSH полностью замещает код указанного пакетного файла, и проиллюстрировал это куском кода.
Уберите зачёркнутое: »
ай красота, скрипт запустился, сейчас попробуем к планировщику его применить
Все работает! Ой какой же я Вам благодарный! Потрясающее! То, что требовалось, если не возражаете приведу выше код в одному из постов в своем блоге?! Огромное спасибо Вам! Очень помогли!
К тому же этот код можно редактировать к другим приложениями которые запускаются в таких же случаях?! :)
если не возражаете приведу выше код в одному из постов в своем блоге?! »
Нисколько.
этот код можно редактировать к другим приложениями которые запускаются в таких же случаях?! »
Да.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.