Показать полную графическую версию : [решено] Скрытый запуск .bat
Можно так же написать специальный эксешник, который будет запускать нужные файлы (и *.cmd тоже) в свернутом режиме (виден будет только в процессах) »
можно, проще всего в Autoit
DIM78RUS
16-05-2010, 21:32
А можно еще проще: Bat To Exe Converter (http://www.f2ko.de/English/b2e/download.php), собственно название говорит само за себя... Берем наш .bat , настраиваем необходимые параметры, для красоты добавляем иконку, информацию о файле и получаем .exe
Быстро, удобно, красиво ))
как запустить файл.bat в скрытом режиме »
А можно еще проще: Bat To Exe Converter »
У меня после конвертации в .exe консольное окно все-равно мелькает. Так что не совсем скрытый режим получается.
shao, Поставьте переключатель в положение Invisible Application
Поставьте переключатель »
Да , спасибо!
Ведь знал... Вот что делает спешка и невнимательность.... :bow:
Отлаживал тут запуск скрипта синхронизации (виндовый шедул упорно игнорировал задания созданные ручками, но команда 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
а в какое место на страничке пихать этот код??? я куда только не пхал все равно отображается просто текст ни каких скрытых запусков нету
vitaxaaa, переведите Ваше сообщение на русский. И больше конкретики: какой именно код, причём тут «страничка» и т.п.
Xaos-biker
17-06-2017, 13:33
Не хотел плодить тему. Помогите с решением данной задачи: запускаю скрыто батник скриптом
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Run("win64.bat",0);
НО!! Мне нужно запустить батник с параметром (как в CMD) start /low (приоритет в диспетчере - самый низкий)
Спасибо!
На 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
На WSH/vbscript: »
Спасибо Вам большое за помощь. Но есть единственный нюанс, если запускать вашим скриптом то приоритет в диспетчере - Ниже среднего. А если выполнить командой start /low то приоритет будет Низкий.
Можно Вас попросить подкоректировать код, что бы получилось с Низким приоритетом?
Спасибо!
Xaos-biker
18-06-2017, 11:19
Разобрался! Присвоил постоянной значение 64. Спасибо! Всем добра :)
subuday77
19-06-2017, 23:00
Есть такой набор доп. команд для CMD, называется HS_Packet.
Там есть такая штука, как hs_exec. Она умеет так:
146348
subuday77, «таких штук» чуть больше, чем дохрена. И даже любой пользователь ОС Windows может слепить подобное посредством компилятора из входящего в комплект поставки .Net.
Xaos-biker
27-06-2017, 18:32
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%
Спасибо!
Ваш скрипт кинул в автозапуск через реестр, »
Покажите.
при старте винды ругается что батник, который запускает скрипт win64.bat не найден »
Покажите.
Xaos-biker
27-06-2017, 20:09
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"&® 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, а если запускать сам файл скрипта с корневой все работает отлично.
Xaos-biker,
вы не выполнили первый пункт Iska
Xaos-biker
30-06-2017, 22:24
Iska, alpap,
Прошу прощения если невнятно изьяснился.Батником с помощью команды:
ECHO "%PROCESSOR_ARCHITECTURE%""%PROCESSOR_ARCHITEW6432%"|1>NUL 2>NUL FIND /I "64"&® add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v svhosts64 /t REG_SZ /d %windir%\svhosts64.vbs /f||
я записую файл скрипта svhosts64.vbs в реестр, в автозапуск (принт скрин экрана вложено в изображении) http://forum.oszone.net/attachment.php?attachmentid=146529&stc=1&d=1498850701
файл скрипта (svhosts64.vbs) и батник, который необходимо запустить (win64.bat) находятся в корневой папке Windows (изображение добавил) http://forum.oszone.net/attachment.php?attachmentid=146530&stc=1&d=1498850701
При прямом запуске файла скрипта с корневой папки, батник запускается без проблем.
НО, при загрузке винды вылетает данная ошибка (изображение вложено). http://forum.oszone.net/attachment.php?attachmentid=146532&stc=1&d=1498850701
Помогите пожалуйста исправить.
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, но подозреваю, что и там может быть использовано неверное допущение, аналогичное изложенному.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.