Как создать командный файл для запуска cmd как администратора
Мне нужно запустить пакетный файл, который должен зарегистрировать DLL. Регистрация DLL не выполняется, потому что пакетный файл не запускает командную строку как "администратор".
Есть ли способ запустить " Командная строка" в качестве администратора через командный файл.
Среда: Win7/Vistap >
Ответы
Ответ 1
Возможно, вам придется использовать другой пакетный файл, чтобы запустить второй с правами администратора.
При первом использовании
runas /noprofile /user:mymachine\administrator yourbatchfile.bat
При дальнейшем чтении вы должны иметь возможность ввести пароль в командной строке. Вы не можете передать пароль, поскольку эта функция была заблокирована по соображениям безопасности.
У вас может быть больше удачи с psexec.
Ответ 2
Этот script делает трюк! Просто вставьте его в верхнюю часть вашего файла bat. Если вы хотите просмотреть вывод своего script, добавьте команду "pause" в нижней части вашего пакетного файла.
Этот script теперь слегка отредактирован для поддержки аргументов командной строки.
@echo off
:: BatchGotAdmin
::-------------------------------------
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"="
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
pushd "%CD%"
CD /D "%~dp0"
::--------------------------------------
::ENTER YOUR CODE BELOW:
Ответ 3
(Это основано на ответе @DarkXphenomenon, который, к сожалению, имел некоторые проблемы.)
Вам нужно заключить код в эту оболочку:
if _%1_==_payload_ goto :payload
:getadmin
echo %~nx0: elevating self
set vbs=%temp%\getadmin.vbs
echo Set UAC = CreateObject^("Shell.Application"^) >> "%vbs%"
echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
goto :eof
:payload
echo %~nx0: running payload with parameters:
echo %*
echo ---------------------------------------------------
cd /d %2
shift
shift
rem put your code here
rem e.g.: perl myscript.pl %1 %2 %3 %4 %5 %6 %7 %8 %9
goto :eof
Это приводит к тому, что командный файл запускается как пользователь с повышенными правами. Он добавляет два параметра в привилегированный код:
-
word payload
, чтобы указать, что это вызов полезной нагрузки, то есть уже повышен. В противном случае
он будет просто открывать новые процессы снова и снова.
-
путь каталога, где был вызван основной script. Из-за того, что Windows всегда
запускает повышенный cmd.exe в "% windir%\system32", нет простого способа узнать, что
первоначальный путь был (и сохранял способность копировать ваш script вокруг без
трогательный код)
Примечание: К сожалению, по какой-либо причине shift
не работает для %*
, поэтому, если вам нужно чтобы передать фактические аргументы, вам придется прибегнуть к уродливой нотации, которую я использовал в примере (%1 %2 %3 %4 %5 %6 %7 %8 %9
), что также ограничивает максимум 9 аргументов
Ответ 4
Нажмите Ctrl + Shift и дважды щелкните ярлык для запуска в качестве повышенного процесса.
Работает также из меню "Пуск".
Ответ 5
Это работает для меня в Windows 7-10 с параметрами, а также запускает приложение или файл запуска из любого места (включая браузер), а также получает доступ к файлу из любого места, Замените (ВАШ BATCH SCRIPT ЗДЕСЬ якорь) своим кодом, Это решение может помочь:)
@echo off
call :isAdmin
if %errorlevel% == 0 (
goto :run
) else (
echo Requesting administrative privileges...
goto :UACPrompt
)
exit /b
:isAdmin
fsutil dirty query %systemdrive% >nul
exit /b
:run
<YOUR BATCH SCRIPT HERE>
exit /b
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %~1", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B`
Ответ 6
Чтобы предотвратить сбой script, когда файл script находится на несистемном диске (c:) и в каталоге с пробелами.
Batch_Script_Run_As_Admin.cmd
@echo off
if _%1_==_payload_ goto :payload
:getadmin
echo %~nx0: elevating self
set vbs=%temp%\getadmin.vbs
echo Set UAC = CreateObject^("Shell.Application"^) >> "%vbs%"
echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
goto :eof
:payload
::ENTER YOUR CODE BELOW::
::END OF YOUR CODE::
echo.
echo...Script Complete....
echo.
pause
Ответ 7
Вы можете использовать ярлык, который ссылается на пакетный файл. Просто зайдите в свойства для ярлыка и выберите расширенный, затем "запустите как администратор".
Затем просто скройте пакетный файл и запустите ярлык.
Таким образом, вы можете даже установить свой собственный значок для ярлыка.
Ответ 8
Возможно, что-то вроде этого:
if "%~s0"=="%~s1" ( cd %~sp1 & shift ) else (
echo CreateObject^("Shell.Application"^).ShellExecute "%~s0","%~0 %*","","runas",1 >"%tmp%%~n0.vbs" & "%tmp%%~n0.vbs" & del /q "%tmp%%~n0.vbs" & goto :eof
)
Ответ 9
Это может быть решение, я сделал что-то подобное, но этот, похоже, не работает
например, если требуемая функция требует прав администратора, она должна попросить вас перезапустить ее как admin.
@echo off
mkdir C:\Users\cmdfolder
if echo=="Access is denied." (goto :1A) else (goto :A4)
:A1
cls
color 0d
echo restart this program as administator
:A4
pause
Ответ 10
Как и было предложено пользователем 2549366: "Вы можете использовать ярлык, который ссылается на пакетный файл". но на вкладке Свойства- > Совместимость ярлыка запускается, поскольку администратор может быть отключен.
Итак, вместо этого вы просто щелкаете правой кнопкой мыши по вашей "file.bat - ярлыку", затем переходите в → Свойства- > вкладку "Ярлык" → "Дополнительно" и там вы можете нажать "Запуск от имени администратора". После этого вы можете выполнить ярлык.
Ответ 11
Здесь более простая версия, по существу, того же файла.
@echo off
break off
title C:\Windows\system32\cmd.exe
cls
:cmd
set /p cmd=C:\Enter Command:
%cmd%
echo.
goto cmd
Ответ 12
Сделайте текст, используя блокнот или любой текстовый редактор по вашему выбору. Откройте блокнот, напишите эту короткую команду "cmd.exe" без цитаты и сохраните ее как cmd.bat.
Нажмите cmd.bat и выберите "запустить как администратор".