Как создать командный файл для запуска cmd как администратора

Мне нужно запустить пакетный файл, который должен зарегистрировать DLL. Регистрация DLL не выполняется, потому что пакетный файл не запускает командную строку как "администратор".

Есть ли способ запустить " Командная строка" в качестве администратора через командный файл.

Среда: Win7/Vista​​p >

Ответы

Ответ 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 и выберите "запустить как администратор".