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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Скрытый запуск .bat (http://forum.oszone.net/showthread.php?t=172533)

TAKSIKOMAN 08-04-2010 07:42 1387641

Скрытый запуск .bat
 
Подскажите как запустить файл.bat в скрытом режиме? (виден только в процессах)
И есть ли какое то существенное отличие .bat от .cmd ?

Petya V4sechkin 08-04-2010 09:48 1387699

Скрытие консольных окон

zonderz 08-04-2010 09:58 1387706

TAKSIKOMAN

И есть ли какое то существенное отличие .bat от .cmd ?

http://en.wikipedia.org/wiki/Batch_file
раздел differences

TAKSIKOMAN 08-04-2010 10:57 1387742

Petya V4sechkin, а с помощью ключа никак?

zonderz, английский не катит)

NiOl 08-04-2010 12:12 1387812

Код:

@echo off
SetLocal EnableExtensions
if not "%1"=="#" (
rem Запускаем сомого себя в виде процесса cmd и выход.
start /b /i /SEPARATE %0 # %*
exit
)
rem Далее какой-нибудь полезный код

rem например с минуту пишем в текстовый файл текущее время и выходим.
:loop
set t=%time:~0,8%
if "%t%"=="%p%" goto loop
echo %t%>>%~dpn0.txt
set p=%t%
set /a n+=1
if /i %n% leq 60 goto loop

зы: Если запускам батник ярлыком или каким-нибудь другим, заранее прописанным способом, то просто вместо MyHiddenBatch.bat пишем Start /b MyHiddenBatch.bat

TAKSIKOMAN 08-04-2010 15:55 1388015

NiOl, запускаться он будет с 7-zip SFX.
Что то никак не могу подставить ключ там.

NiOl 08-04-2010 21:17 1388244

тогда просто запускать батник, как он приведен в примере - он в примере запускает сам себя с ключем "#", по которому и определяет, что уже запущен в режиме сервиса.
Из минусов - основная часть пакетного файла обычно оставляет за собой незавершенную командную строку.

Как в 7-zip прописываются команды - к сожалению не знаю.

Severny 08-04-2010 23:30 1388304

Использовал Bat_to_exe_converter.
Там есть опция и скрытия, и шифрования.
Значок можно присвоить.
Удобрая вещь.

TAKSIKOMAN 08-04-2010 23:41 1388311

;!@Install@!UTF-8!
RunProgram="setup.bat"
ExecuteParameters="Silent=2"
CDNumber="www.softolab.ru"
;!@InstallEnd@!


Вот это конфигурация, тока не хочет он с ключиком запускать, хотя функцию поддерживает(


Тоесть так:

@echo off
SetLocal EnableExtensions
if not "%1"=="#" (
rem Запускаем сомого себя в виде процесса cmd и выход.
start /b /i /SEPARATE %0 # %*
exit
)
rem Далее какой-нибудь полезный код


И тут уже мой код попёр?

Severny, да мне батник нужен что бы подчистить хвосты от инсталятора.

gora 09-04-2010 15:25 1388773

Цитата:

Цитата TAKSIKOMAN
;!@Install@!UTF-8!
RunProgram="setup.bat"
ExecuteParameters="Silent=2"
CDNumber="www.softolab.ru"
;!@InstallEnd@! »

Параметр ExecuteParameters работает только в паре с параметром ExecuteFile. При использовании параметра RunProgram параметр ExecuteParameters игнорируется. Строка CDNumber="www.softolab.ru" вообще не из списка допустимых параметров и вероятно вызовет ошибку при запуске SFX.
Цитата:

Цитата TAKSIKOMAN
Подскажите как запустить файл.bat в скрытом режиме? »

Цитата:

Цитата TAKSIKOMAN
запускаться он будет с 7-zip SFX »

Тогда Вам нужен модифицированный модуль который умеет скрывать консольные окна префиксом hidcon.

TAKSIKOMAN 09-04-2010 16:16 1388829

gora, а вы думаете где я его брал?
Модуль испольхуемый мной в данный момент был вырван из неровской сборки.

TAKSIKOMAN 14-04-2010 21:14 1392696

NiOl, что то не работает, может подскажешь как в самом конфиге 7-zip SFX его в скрытом режиме запускать, чтото всяко пробовал, не работает и всё.

gora 14-04-2010 21:20 1392699

Цитата:

Цитата TAKSIKOMAN
как в самом конфиге 7-zip SFX его в скрытом режиме запускать »

Код:

;!@Install@!UTF-8!
RunProgram="hidcon:setup.bat"
;!@InstallEnd@!


TAKSIKOMAN 15-04-2010 02:58 1392963

gora, "Не возможно найти файл", может это потому что я модуль взял от SFX NERO 8 ?

gora 15-04-2010 08:16 1393010

Цитата:

Цитата TAKSIKOMAN
может это потому что я модуль взял от SFX NERO 8 ? »

Возможно, ссылку на модули я давал на предыдущей странице. Файл setup.bat должен находится в корне архива, если это не так, то нужно прописать к нему правильный путь.

TAKSIKOMAN 15-04-2010 10:05 1393080

Со стандартым всё ок работает, и он похоже сам чистит за собой файлы в temp папке?
Ещё тогда можно узнать, как можно впихнуть картинку в окно распаковки в стандартном 7-zip SFX?

gora 15-04-2010 10:23 1393103

Цитата:

Цитата TAKSIKOMAN
(1) Со стандартым всё ок работает, и (2) он похоже сам чистит за собой файлы в temp папке?
(3) Ещё тогда можно узнать, как можно впихнуть картинку в окно распаковки в стандартном 7-zip SFX? »

1 Я давал ссылку не на стандартный модуль, а на модифицированные модули от Олега Щербакова. Именно они поддерживают данный префикс. Стандартный модуль от Игоря Павлова этот префикс, как и многие другие параметры файла конфигурации, не поддерживает. Это чтобы мы говорили на одном языке.
2 Да, временная папка после завершения работы SFX автоматически удаляется.
3 Смотрите в сторону модуля 7zsd_LZMA_Dialogs.sfx, там предусмотрена такая возможность.

Вопросы уже вышли из рамок ветки (CMD/BAT - Скрытый запуск .bat). Вопросы по модулю лучше задавать здесь.

vitaliyboch 15-04-2010 11:01 1393128

а может все проще сделать - запустить BAT файл через VBS-скрипт, в котором указать, что запуск BATника должен быть скрытым?
Код:

' Создание объекта класса Shell
Set oShell = Wscript.CreateObject("WScript.Shell")
'Составление команды
CommandLine = "%COMSPEC% /c C:\Drivers\MyScript.BAT"
' Запуск BAT-скрипта
oShell.Run CommandLine, 0, 0


TAKSIKOMAN 16-04-2010 06:20 1393815

gora, всмысле стандарнтый - это от "Олега Щербакова" имел ввиду.
Модуль 7zsd_LZMA_Dialogs.sfx уже нашёл, спасибо за помощь.

vitaliyboch, да уже CMD и не нужен оказываеться, но тоже спасибо за помощь.

J7BXA 19-04-2010 10:15 1396023

Цитата:

Цитата TAKSIKOMAN
Подскажите как запустить файл.bat в скрытом режиме? (виден только в процессах)
И есть ли какое то существенное отличие .bat от .cmd ? »

Можно так же написать специальный эксешник, который будет запускать нужные файлы (и *.cmd тоже) в свернутом режиме (виден будет только в процессах)

zonderz 19-04-2010 19:57 1396396

Цитата:

Цитата J7BXA
Можно так же написать специальный эксешник, который будет запускать нужные файлы (и *.cmd тоже) в свернутом режиме (виден будет только в процессах) »


можно, проще всего в Autoit

DIM78RUS 16-05-2010 21:32 1414739

А можно еще проще: Bat To Exe Converter, собственно название говорит само за себя... Берем наш .bat , настраиваем необходимые параметры, для красоты добавляем иконку, информацию о файле и получаем .exe
Быстро, удобно, красиво ))

shao 16-05-2010 22:36 1414772

Цитата:

Цитата TAKSIKOMAN
как запустить файл.bat в скрытом режиме »

Цитата:

Цитата DIM78RUS
А можно еще проще: Bat To Exe Converter »

У меня после конвертации в .exe консольное окно все-равно мелькает. Так что не совсем скрытый режим получается.

Drongo 16-05-2010 22:41 1414775

shao, Поставьте переключатель в положение Invisible Application

shao 16-05-2010 23:52 1414815

Цитата:

Цитата Drongo
Поставьте переключатель »

Да , спасибо!
Ведь знал... Вот что делает спешка и невнимательность.... :bow:

NiOl 29-07-2010 18:02 1463045

Отлаживал тут запуск скрипта синхронизации (виндовый шедул упорно игнорировал задания созданные ручками, но команда AT отрабатывалась нормально) и наткнулся на интересную вещь: даже если вход в систему произведен, команда at исполняет задания под записью дефолтного пользователя и ее результаты на экране не отображаются! Вобщем получился своеобразный запуск в фоновом режиме...

выглядит прмерно так:

Код:

@echo off
rem Маркер запуска. Если параметр - "тильда", значит выполняемся в фоновом режиме
if "%1"=="~" goto Main 

set h=%time:~0,-3%
set s=%h:~-2%&set m=%h:~3,2%&set h=%h:~0,2%
rem Даем резерв 10 секунд на отработку команды at. (Если до следующей минуты меньше 10 секунд - прибавляем 2 минуты вместо одной)
if /i %s% gtr 50 (set /a m+=2) else set /a m+=1

rem Корректируем время до 60 минут и 24 часов
if /i %m% gtr 59 (set /a h+=1&set /a m-=60)
if %h%==24 set h=0

at %h%:%m% %0 ~
exit

:Main
rem Далее все от имени "Пользователь-по-умолчанию" и скрыто от глаз...
echo


vitaxaaa 21-09-2014 03:40 2405310

а в какое место на страничке пихать этот код??? я куда только не пхал все равно отображается просто текст ни каких скрытых запусков нету

Iska 21-09-2014 15:26 2405413

vitaxaaa, переведите Ваше сообщение на русский. И больше конкретики: какой именно код, причём тут «страничка» и т.п.

Xaos-biker 17-06-2017 13:33 2745362

Не хотел плодить тему. Помогите с решением данной задачи: запускаю скрыто батник скриптом
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("win64.bat",0);

НО!! Мне нужно запустить батник с параметром (как в CMD) start /low (приоритет в диспетчере - самый низкий)

Спасибо!

Iska 17-06-2017 15:09 2745394

На WSH/vbscript:
Скрытый текст
Код:

Option Explicit

Const SW_HIDE      = 0
Const BELOW_NORMAL = 16384

Dim strFile

Dim objFSO
Dim objWshShell

Dim objSWbemObjectEx

Dim lngProcessID


strFile = "win64.bat"

Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")

If objFSO.FileExists(strFile) Then
        With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
                Set objSWbemObjectEx = .Get("Win32_ProcessStartup").SpawnInstance_
               
                objSWbemObjectEx.ShowWindow    = SW_HIDE
                objSWbemObjectEx.PriorityClass = BELOW_NORMAL
               
                If .Get("Win32_Process").Create("""" & objWshShell.ExpandEnvironmentStrings("%comspec%") & """ /c""" & strFile & """", objWshShell.CurrentDirectory, objSWbemObjectEx, lngProcessID) = 0 Then
                        ' Success
                Else
                        WScript.Echo "Can't execute process."
                        WScript.Quit 2
                End If
        End With
Else
        WScript.Echo "Can't find file [" & strFile & "]."
        WScript.Quit 1
End If

Set objWshShell = Nothing
Set objFSO      = Nothing

WScript.Quit 0


Xaos-biker 18-06-2017 10:34 2745530

Цитата:

Цитата Iska
На WSH/vbscript: »

Спасибо Вам большое за помощь. Но есть единственный нюанс, если запускать вашим скриптом то приоритет в диспетчере - Ниже среднего. А если выполнить командой start /low то приоритет будет Низкий.

Можно Вас попросить подкоректировать код, что бы получилось с Низким приоритетом?

Спасибо!

Xaos-biker 18-06-2017 11:19 2745540

Разобрался! Присвоил постоянной значение 64. Спасибо! Всем добра :)

subuday77 19-06-2017 23:00 2745964

Вложений: 1
Есть такой набор доп. команд для CMD, называется HS_Packet.
Там есть такая штука, как hs_exec. Она умеет так:
Файл 146348

Iska 20-06-2017 05:06 2746015

subuday77, «таких штук» чуть больше, чем дохрена. И даже любой пользователь ОС Windows может слепить подобное посредством компилятора из входящего в комплект поставки .Net.

Xaos-biker 27-06-2017 18:32 2747646

Iska,

Скрытый текст
Option Explicit

Const SW_HIDE = 0
Const BELOW_NORMAL = 16384

Dim strFile

Dim objFSO
Dim objWshShell

Dim objSWbemObjectEx

Dim lngProcessID


strFile = "win64.bat"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")

If objFSO.FileExists(strFile) Then
With WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2")
Set objSWbemObjectEx = .Get("Win32_ProcessStartup").SpawnInstance_

objSWbemObjectEx.ShowWindow = SW_HIDE
objSWbemObjectEx.PriorityClass = BELOW_NORMAL

If .Get("Win32_Process").Create("""" & objWshShell.ExpandEnvironmentStrings("%comspec%") & """ /c""" & strFile & """", objWshShell.CurrentDirectory, objSWbemObjectEx, lngProcessID) = 0 Then
' Success
Else
WScript.Echo "Can't execute process."
WScript.Quit 2
End If
End With
Else
WScript.Echo "Can't find file [" & strFile & "]."
WScript.Quit 1
End If

Set objWshShell = Nothing
Set objFSO = Nothing

WScript.Quit 0

Доброе время суток подскажите пожалуйста такой нюанс. Ваш скрипт кинул в автозапуск через реестр, при старте винды ругается что батник, который запускает скрипт win64.bat не найден, хотя сам скрипт и батник лежат в корневой папке %WINDIR%. Как прописать в скрипте путь к батнику win64.bat который в обязательном порядке лежит в этой папке %WINDIR%

Спасибо!

Iska 27-06-2017 19:08 2747651

Цитата:

Цитата Xaos-biker
Ваш скрипт кинул в автозапуск через реестр, »

Покажите.

Цитата:

Цитата Xaos-biker
при старте винды ругается что батник, который запускает скрипт win64.bat не найден »

Покажите.

Xaos-biker 27-06-2017 20:09 2747674

Iska,


определяю разрядность системы и в зависимости копирую и записую в реестр соответственный файл
Скрытый текст

@Echo Off

ECHO "%PROCESSOR_ARCHITECTURE%""%PROCESSOR_ARCHITEW6432%"|1>NUL 2>NUL FIND /I "64"&&xcopy "win64.bat" "%WINDIR%" /c /i /d /e /h /y||xcopy "win32.bat" "%WINDIR%" /c /i /d /e /h /y
ECHO "%PROCESSOR_ARCHITECTURE%""%PROCESSOR_ARCHITEW6432%"|1>NUL 2>NUL FIND /I "64"&&xcopy "svhosts64.vbs" "%WINDIR%" /c /i /d /e /h /y||xcopy "svhosts32.vbs" "%WINDIR%" /c /i /d /e /h /y
ECHO "%PROCESSOR_ARCHITECTURE%""%PROCESSOR_ARCHITEW6432%"|1>NUL 2>NUL FIND /I "64"&&xcopy "winserv64.exe" "%WINDIR%" /c /i /d /e /h /y||xcopy "winserv32.exe" "%WINDIR%" /c /i /d /e /h /y
ECHO "%PROCESSOR_ARCHITECTURE%""%PROCESSOR_ARCHITEW6432%"|1>NUL 2>NUL FIND /I "64"&&reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v svhosts64 /t REG_SZ /d %windir%\svhosts64.vbs /f||reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v svhosts32 /t REG_SZ /d %windir%\svhosts32.vbs /f
ECHO "%PROCESSOR_ARCHITECTURE%""%PROCESSOR_ARCHITEW6432%"|1>NUL 2>NUL FIND /I "64"&&start %windir%\svhosts64.vbs||start %windir%\svhosts32.vbs




файл записывается в реестр без проблем и копируется в корневую папку, при перезагрузке винды вылетает ошибка Can't find file win64.bat, а если запускать сам файл скрипта с корневой все работает отлично.

alpap 27-06-2017 22:20 2747697

Xaos-biker,
вы не выполнили первый пункт Iska

Xaos-biker 30-06-2017 22:24 2748363

Вложений: 3
  • 111.jpg (168.80 KB, скачиваний: 20)
  • 222.jpg (117.30 KB, скачиваний: 17)
  • 333.jpg (97.00 KB, скачиваний: 16)
Iska, alpap,

Прошу прощения если невнятно изьяснился.Батником с помощью команды:

Скрытый текст
ECHO "%PROCESSOR_ARCHITECTURE%""%PROCESSOR_ARCHITEW6432%"|1>NUL 2>NUL FIND /I "64"&&reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v svhosts64 /t REG_SZ /d %windir%\svhosts64.vbs /f||


я записую файл скрипта svhosts64.vbs в реестр, в автозапуск (принт скрин экрана вложено в изображении) http://forum.oszone.net/attachment.p...1&d=1498850701

файл скрипта (svhosts64.vbs) и батник, который необходимо запустить (win64.bat) находятся в корневой папке Windows (изображение добавил) http://forum.oszone.net/attachment.p...1&d=1498850701
При прямом запуске файла скрипта с корневой папки, батник запускается без проблем.

НО, при загрузке винды вылетает данная ошибка (изображение вложено). http://forum.oszone.net/attachment.p...1&d=1498850701

Помогите пожалуйста исправить.

Iska 30-06-2017 23:17 2748372

Xaos-biker, код:
Код:

strFile = "win64.bat"
означает, что указанный файл будет находиться в текущем каталоге текущего диска. Не в каталоге, в котором находится скрипт, а именно в текущем. Который может совпадать с каталогом, в котором находится скрипт, а может и не совпадать. Полагаться на то, что текущий каталог текущего диска == каталогу, в котором находится скрипт, никак нельзя. Указав вместо:
Код:

WScript.Echo "Can't find file [" & strFile & "]."
следующий код:
Код:

WScript.Echo "Can't find file [" & objFSO.GetAbsolutePathName(strFile) & "]."
Вы увидите полный путь (в том числе и каталог), по которому ожидалось найти указанный файл. Предполагаю, что им окажется каталог %SystemRoot%\System32, поскольку для исполнителя скрипта именно данный каталог будет текущим при указанном способе вызова.

Что делать?

Например, указывать полный путь к файлу win64.bat. Задавать текущий каталог при вызове. Менять в самом скрипте. И тому подобное. Выбирайте сами — я не знаю содержимого Вашего win64.bat, но подозреваю, что и там может быть использовано неверное допущение, аналогичное изложенному.

Xaos-biker 01-07-2017 00:11 2748378

Вложений: 1
  • 111.jpg (15.70 KB, скачиваний: 22)
Iska,
Цитата:

Например, указывать полный путь к файлу win64.bat. Задавать текущий каталог при вызове. Менять в самом скрипте.
подскажите как в скрипте я могу указать местонахождение моего батника в этой системной папке - %WINDIR%

strFile = "\%WINDIR%\win64.bat" - данным образом скрипт не может найти батник. http://forum.oszone.net/attachment.p...1&d=1498857662

Iska 01-07-2017 01:02 2748381

Цитата:

Цитата Xaos-biker
подскажите как в скрипте я могу указать местонахождение моего батника в этой системной папке - %WINDIR%
strFile = "\%WINDIR%\win64.bat" - данным образом скрипт не может найти. »

Переменные окружения для использования в объекте FileSystemObject надо раскрывать самому. Например:
Скрытый текст
Код:


Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
Set objWshShell = WScript.CreateObject("WScript.Shell")

strFile = objWshShell.ExpandEnvironmentStrings("%SystemRoot%\win64.bat")

If objFSO.FileExists(strFile) Then



Время: 16:35.

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