Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программное обеспечение Windows (http://forum.oszone.net/forumdisplay.php?f=7)
-   -   Скрыть cmd.exe (http://forum.oszone.net/showthread.php?t=271210)

Ua-life 02-11-2013 14:10 2246037

Скрыть 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 через план. заданий?!

Iska 02-11-2013 15:23 2246073

Цитата:

Цитата 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()».

Ua-life 02-11-2013 17:40 2246169

Цитата:

Цитата Iska
Задание исполняется от имени текущего пользователя? »

да под текущим
Цитата:

Цитата Iska
Не знаете. Параметр «/b» команды «start» означает »

что тут сказать, как не упс :)
Цитата:

Цитата Iska
Попробуйте использовать WSH, наподобие (не проверялось): »

Где то такое видел ... попробую
Цитата:

Цитата Iska
Не забудьте поправить кодировку в «… /FD:\–цб /P цб» и указать правильный текущий каталог вместо приведённого в коде «"C:\Program Files\1cv82\8.2.16.352\bin"» во втором параметре метода «.Create()». »

спасибо, буду пробовать.

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

Iska 02-11-2013 23:52 2246346

Цитата:

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

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

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

Ua-life 03-11-2013 17:17 2246641

Цитата:

Цитата Iska
Вам ведь это требовалось? »

да, это мне нужно
Цитата:

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

нет, это мне ни к чему
Спасибо вам, буду пробовать, отпишусь о результате

Ua-life 04-11-2013 11:20 2247069

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

Iska 04-11-2013 22:26 2247454

Цитата:

Цитата 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 ЕгоПароль


Ua-life 05-11-2013 11:14 2247714

Подставил свои параметры (прошу посмотреть правильно ли)
читать дальше »
Код:

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 »

не понял, так этот кусок кода и так присутствует в выше приведенном вами коде

Iska 05-11-2013 11:29 2247726

Уберите зачёркнутое:
Код:

                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 05-11-2013 12:04 2247754

Цитата:

Цитата Iska
Уберите зачёркнутое: »

ай красота, скрипт запустился, сейчас попробуем к планировщику его применить

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

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

Iska 05-11-2013 13:41 2247823

Цитата:

Цитата Ua-life
если не возражаете приведу выше код в одному из постов в своем блоге?! »

Нисколько.

Цитата:

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

Да.


Время: 22:35.

Время: 22:35.
© OSzone.net 2001-