Показать полную графическую версию : [решено] Запуск .bat через .bat
VladoSer
02-09-2021, 17:30
Всем доброго.
Есть такие программы как superuser64/Ti(trusted installer) для запуска исполняемых файлов от имени TrustedInstaller, которые по сути своей являются коммандной строкой и при запуске открывают ее же для дальнейшего вписания туда названия файла .
Собственно суть вопроса.
Как открывать мой n.bat файл сразу через них?
По сути если я пропишу в код своего n.bat файла это
@echo off
echo привет
superUser64.exe n.bat
pause
То у меня открывается бесконечное количество cmd, поэтому приходится использовать отдельный bat - файл «запускатель» с таким кодом
superuser64.exe n.bat
Exit
То файл этот срабатывает и сразу закрывается , запускается мой n.bat с нужным мне кодом, но хотелось бы сразу запускать мой n.bat без файла «запускателя»
Пробовал так, но тогда обе коммандные строки закрываются, и на этом все.
@echo off
Echo привет
superUser64.exe n.bat & taskkill /f /im cmd.exe
Надеюсь понятно обьяснил суть, спасибо.
если я пропишу в код своего n.bat файла это … То у меня открывается бесконечное количество cmd»
Естественно. Вы запускаете Ваш пакетный файл снова и снова бесконечной рекурсией без условия выхода.
Собственно суть вопроса.
Как открывать мой n.bat файл сразу через них? »
Так и запускать. В чём проблема? Ну, и, если уж хотите сделать барона Мюнхгаузена, который будет вытаскивать из болота за волосы пакетный файл, который будет сам себя перезапускать через superUser (https://github.com/mspaintmsi/superUser) — делайте условие:
if <процесс cmd.exe, в котором обрабатывается данный пакетный файл, обладает привилегиями TrustedInstaller> (
команда1
команда2
…
командаNN
) else (
superUser64.exe "%~f0"
)
Как именно должно выглядеть это условие — не подскажу.
VladoSer
02-09-2021, 22:38
В чём проблема? »
Хочется просто нажать на n.bat который будет запущен сразу через superuser64
делайте условие: »
Это уже что-то, однако проверить cmd на права Ti не представляю как можно.
Как то бы заставить эту заразу запуститься один раз через SU и сразу же его же окно закрыть , чтобы осталось одно окно cmd , в котором бы и выполнялись команды моего n.bat
По сути, нужно запустить, проверить, что запустилось и пропустить этот «код запуска» . А так да, получается круг из запускаемых cmd.
наверное, что-то типа этого if not [%1]==[ti] (
superUser64.exe /c """%~f0"" ti"
exit
)
Туды ж её в качель! Sham, точно! Нам же фактически не нужно проверять именно то, что процесс уже обладает искомыми привилегиями, достаточно просто перезапустить с флагом :(.
VladoSer
03-09-2021, 19:31
if not [%1]==[ti] (
superUser64.exe /c """%~f0"" ti"
exit
) »
Попробовал, запускает 1 копию cmd, как и надо. Однако следующий код выбивает ошибку доступа, а он должен исполняться, в этом и суть superUser этого.
https://i.imgur.com/s99t1Yr.png
VladoSer, неправильно пробуете.
if not [%1]==[ti] (
superUser64.exe /c """%~f0"" ti"
exit
) else (
здесь reg.exe add …
…и прочее по потребности.
)
убрать echo для боевого состояния
@echo off
for /f tokens^=2^ delims^=^" %%a in ("%cmdcmdline%") do echo superUser64.exe "%%a"
pause
(Код будет зациклен намертво, нужна принудительная остановка)
VladoSer
03-09-2021, 21:37
Неправильно пробуете. »
https://i.imgur.com/7RbivAv.png
жму на n.bat , cmd открывается, сразу же закрывается.
убрать echo для боевого состояния »
Убрал.
куда мне добавить свой код?
https://i.imgur.com/7mlDV3r.png
вот мой код, который должен выполняться .
reg add "HKEY_CLASSES_ROOT\CLSID\{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}" /v "System.IsPinnedToNameSpaceTree" /t REG_DWORD /d "0" /f >> nul && echo Значок сеть убран. Нажмите Enter.
оказалось все сложнее, чем кажется. Возможно, есть смысл оставить все как есть и не изобретать велосипед.
VladoSer
03-09-2021, 22:00
Нашел другое решение в виде программы RunAsTi
https://usbtor.ru/viewtopic.php?t=1452
код выглядит таким образом
@echo off
cd /d "%~dp0"
if /i not "%USERNAME%"=="SYSTEM" RunAsTI.exe "%~f0" %* & exit
echo Running as System
pause
итог:
https://i.imgur.com/Fe1ew2o.png
куда мне добавить свой код? »
@echo off
set "bat=%~f0%"
wmic process where "Commandline like '%%%bat:\=\\%%%'" get Name|find /c "cmd.exe"|>nul findstr "^1$"|| exit
superUser64.exe "%bat%"
:: Сюда
dir /b
pause
жму на n.bat , cmd открывается, сразу же закрывается. »
VladoSer, приношу Вам свои извинения. Посмотрел вовнутрь superUser.c — да, так, как было написано, работать не будет.
VladoSer
04-09-2021, 15:50
:: Сюда »
Возможно, ваш код и рабочий, но из за специфики superuser, которая непонятно как работает, оно не отрабатывает, в любом случае, нашел решение в виде другой программы, которая прекрасно справляется с необходимой задачей и без танцев с бубнами , о котором я писал выше.
Спасибо, решено.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.