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

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

VladoSer 02-09-2021 17:30 2965687

Запуск .bat через .bat
 
Всем доброго.
Есть такие программы как 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

Надеюсь понятно обьяснил суть, спасибо.

Iska 02-09-2021 22:00 2965701

Цитата:

Цитата VladoSer
если я пропишу в код своего n.bat файла это … То у меня открывается бесконечное количество cmd»

Естественно. Вы запускаете Ваш пакетный файл снова и снова бесконечной рекурсией без условия выхода.

Цитата:

Цитата VladoSer
Собственно суть вопроса.
Как открывать мой n.bat файл сразу через них? »

Так и запускать. В чём проблема? Ну, и, если уж хотите сделать барона Мюнхгаузена, который будет вытаскивать из болота за волосы пакетный файл, который будет сам себя перезапускать через superUser — делайте условие:
Код:

if <процесс cmd.exe, в котором обрабатывается данный пакетный файл, обладает привилегиями TrustedInstaller> (
    команда1
    команда2
   
    командаNN
) else (
    superUser64.exe "%~f0"
)

Как именно должно выглядеть это условие — не подскажу.

VladoSer 02-09-2021 22:38 2965710

Цитата:

Цитата Iska
В чём проблема? »

Хочется просто нажать на n.bat который будет запущен сразу через superuser64


Цитата:

Цитата Iska
делайте условие: »

Это уже что-то, однако проверить cmd на права Ti не представляю как можно.

Как то бы заставить эту заразу запуститься один раз через SU и сразу же его же окно закрыть , чтобы осталось одно окно cmd , в котором бы и выполнялись команды моего n.bat

По сути, нужно запустить, проверить, что запустилось и пропустить этот «код запуска» . А так да, получается круг из запускаемых cmd.

Sham 03-09-2021 05:42 2965722

наверное, что-то типа этого
Код:

if not [%1]==[ti] (
        superUser64.exe /c """%~f0"" ti"
        exit       
)


Iska 03-09-2021 18:33 2965774

Туды ж её в качель! Sham, точно! Нам же фактически не нужно проверять именно то, что процесс уже обладает искомыми привилегиями, достаточно просто перезапустить с флагом :(.

VladoSer 03-09-2021 19:31 2965779

Цитата:

Цитата Sham
if not [%1]==[ti] (
superUser64.exe /c """%~f0"" ti"
exit
) »

Попробовал, запускает 1 копию cmd, как и надо. Однако следующий код выбивает ошибку доступа, а он должен исполняться, в этом и суть superUser этого.

Iska 03-09-2021 21:09 2965785

VladoSer, неправильно пробуете.
Код:

if not [%1]==[ti] (
        superUser64.exe /c """%~f0"" ti"
        exit       
) else (
        здесь reg.exe add …
        …и прочее по потребности.

)


alpap 03-09-2021 21:10 2965786

убрать echo для боевого состояния
Код:

@echo off
for /f tokens^=2^ delims^=^" %%a in ("%cmdcmdline%") do echo superUser64.exe "%%a"
pause

(Код будет зациклен намертво, нужна принудительная остановка)

VladoSer 03-09-2021 21:37 2965792

Цитата:

Цитата Iska
Неправильно пробуете. »

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

жму на n.bat , cmd открывается, сразу же закрывается.

Цитата:

Цитата alpap
убрать echo для боевого состояния »

Убрал.
куда мне добавить свой код?
Скрытый текст

вот мой код, который должен выполняться .
Скрытый текст
Код:

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 2965795

Нашел другое решение в виде программы RunAsTi
Скрытый текст


код выглядит таким образом
Код:

@echo off
cd /d "%~dp0"
if /i not "%USERNAME%"=="SYSTEM" RunAsTI.exe "%~f0" %* & exit
echo Running as System
pause

итог:
Скрытый текст

alpap 04-09-2021 13:09 2965815

Цитата:

Цитата VladoSer
куда мне добавить свой код? »

Код:

@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


Iska 04-09-2021 15:18 2965830

Цитата:

Цитата VladoSer
жму на n.bat , cmd открывается, сразу же закрывается. »

VladoSer, приношу Вам свои извинения. Посмотрел вовнутрь superUser.c — да, так, как было написано, работать не будет.

VladoSer 04-09-2021 15:50 2965831

Цитата:

Цитата alpap
:: Сюда »

Возможно, ваш код и рабочий, но из за специфики superuser, которая непонятно как работает, оно не отрабатывает, в любом случае, нашел решение в виде другой программы, которая прекрасно справляется с необходимой задачей и без танцев с бубнами , о котором я писал выше.
Спасибо, решено.


Время: 07:27.

Время: 07:27.
© OSzone.net 2001-