Войти

Показать полную графическую версию : Скрыть cmd.exe


Ua-life
02-11-2013, 14:10
Моя тема немного отличается от иных, а это нужно в планировщике заданий 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 через план. заданий?!

Iska
02-11-2013, 15:23
нужно в планировщике заданий 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()».

Ua-life
02-11-2013, 17:40
Задание исполняется от имени текущего пользователя? »
да под текущим
Не знаете. Параметр «/b» команды «start» означает »
что тут сказать, как не упс :)
Попробуйте использовать WSH, наподобие (не проверялось): »
Где то такое видел ... попробую
Не забудьте поправить кодировку в «… /FD:\–цб /P цб» и указать правильный текущий каталог вместо приведённого в коде «"C:\Program Files\1cv82\8.2.16.352\bin"» во втором параметре метода «.Create()». »
спасибо, буду пробовать.

А что бы через планировщик заделать желаемое никак?

Iska
02-11-2013, 23:52
А что бы через планировщик заделать желаемое никак? »
Ua-life, я и не предлагаю отказываться от Планировщика. Сохраняете приведённый код в файл с расширением .vbs, поправив указанные выше моменты в коде, затем добавляете путь к сохранённому файлу в Планировщик, ровно так же, как Вы делали бы сие для пакетного файла. По умолчанию будет использоваться хост «wscript.exe», посему окна консоли Вы не увидите. Вам ведь это требовалось?

P.S. Я правильно понял, что речь шла только об окне консоли командного процессора, а окно самого приложения 1С при запуске принудительно скрывать не нужно, так?

Ua-life
03-11-2013, 17:17
Вам ведь это требовалось? »
да, это мне нужно
Я правильно понял, что речь шла только об окне консоли командного процессора, а окно самого приложения 1С при запуске принудительно скрывать не нужно, так? »
нет, это мне ни к чему
Спасибо вам, буду пробовать, отпишусь о результате

Ua-life
04-11-2013, 11:20
Пришел на работу и ко мне тут дошло, а каким образом мне ваш и мой код совместить?!
http://copyraite.blogspot.com/2013/11/blog-post.html вот мое решение, буду признателен, запутался

Iska
04-11-2013, 22:26
а каким образом мне ваш и мой код совместить?! »
Не надо совмещать. Просто сделайте это:
Сохраняете приведённый код в файл с расширением .vbs, поправив указанные выше моменты в коде, затем добавляете путь к сохранённому файлу в Планировщик, ровно так же, как Вы делали бы сие для пакетного файла. »
Если процесс «1cv8.exe» не существует:
If .ExecQuery("SELECT * FROM Win32_Process WHERE Name = '1cv8.exe'").Count = 0 Then
только тогда он будет создан с повышенным приоритетом.

Не забудьте задать каталог в методе «.Create» и поправить:
… ENTERPRISE /F D:\ПутьКБазе /N НазваниеПользователя /P ЕгоПароль

Ua-life
05-11-2013, 11:14
Подставил свои параметры (прошу посмотреть правильно ли)
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 »
не понял, так этот кусок кода и так присутствует в выше приведенном вами коде

Iska
05-11-2013, 11:29
Уберите зачёркнутое:
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 полностью замещает код указанного пакетного файла, и проиллюстрировал это куском кода.

Ua-life
05-11-2013, 12:04
Уберите зачёркнутое: »
ай красота, скрипт запустился, сейчас попробуем к планировщику его применить

Все работает! Ой какой же я Вам благодарный! Потрясающее! То, что требовалось, если не возражаете приведу выше код в одному из постов в своем блоге?! Огромное спасибо Вам! Очень помогли!

К тому же этот код можно редактировать к другим приложениями которые запускаются в таких же случаях?! :)

Iska
05-11-2013, 13:41
если не возражаете приведу выше код в одному из постов в своем блоге?! »
Нисколько.

этот код можно редактировать к другим приложениями которые запускаются в таких же случаях?! »
Да.




© OSzone.net 2001-2012