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

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

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

Окружение: Win7/Vista

Комментарии к вопросу (6)

Этот скрипт делает трюк! Просто вставьте его в верхней части вашего файла летучая мышь. Если вы хотите просмотреть результат выполнения скрипта, добавить на "паузу" и команды в нижней части вашего пакетного файла.

Этот сценарий сейчас немного отредактировал, чтобы поддержать аргументы командной строки.

@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)
Решение

Возможно, вам придется сначала использовать другой пакетный файл, чтобы запустить второй с правами администратора.

В первом используйте

runas /noprofile /user:mymachine\administrator yourbatchfile.bat

При дальнейшем использовании вы должны уметь набирать пароль в подсказке. Вы не можете ввести пароль, так как эта функция была заблокирована по соображениям безопасности.

Возможно, вам больше повезет с psexec.

Комментарии (3)

(Это основано на ответе @DarkXphenomenon's, который, к сожалению, имел некоторые проблемы).

Вы должны заключить свой код в эту обертку:

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

Это заставляет пакетный файл запускаться от имени привилегированного пользователя. Это добавляет два параметра к привилегированному коду:

  • слово payload, чтобы указать, что это вызов полезной нагрузки, т.е. уже повышенного уровня. В противном случае он бы просто открывал новые процессы снова и снова.

  • путь к директории, где был вызван основной скрипт. Из-за того, что Windows всегда запускает повышенный cmd.exe в "%windir%\system32", нет простого способа узнать, какой первоначальный путь (и сохранить возможность копировать ваш скрипт без не трогая код)

Примечание: К сожалению, по какой-то причине shift не работает для %*, поэтому если вам нужно передать фактические аргументы, вам придется прибегнуть к уродливой нотации, которую я использовал в примере (%1 %2 %3 %4 %5 %6 %7 %8 %9), что также приводит к ограничению на максимум 9 аргументов

Комментарии (0)

Пресс <и>сочетание клавиш Ctrl</роз>+<и>сдвиг</КБД> и дважды щелкните ярлык для запуска с повышенными привилегиями процесса.

Работы из меню Пуск, а также.

Комментарии (0)

Это работает для меня в Windows 7 на 10 с параметрами, а также начнется приложение или файл из любого места(включая браузер), а также доступ к файлу из любого места,заменить (пакетный скрипт здесь якорь) с вашим кодом ,это решение может помочь :)

     @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

     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`
Комментарии (0)

Чтобы предотвратить сценарий от ошибки, если файл скрипта находится на не системном диске (C:) и в папке с пробелами.

Batch_Script_Run_As_Admin.УМК

@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
Комментарии (0)

Вы можете использовать ярлык, который ссылается на пакетный файл. Просто зайдите в свойства ярлыка и выберите расширенные параметры, затем "Запуск от имени администратора".

Затем просто сделайте пакетный файл скрытым и запустите ярлык.

Таким образом, вы даже можете установить свой собственный значок для ярлыка.

Комментарии (3)

Как user2549366 говорил "Вы можете использовать ярлык который ссылается на пакетный файл." но в свойствах-и GT;вкладка совместимость ярлыка, Запуск от имени администратора может быть отключен.

Так что вместо этого вы просто щелкните правой кнопкой мыши на вашу "файл.бат - ярлык" Тогда иди ->Свойства->В разделе -&ярлык ГТ; Дополнительно и там вы можете нажать Запуск от имени администратора. После этого можно запускать ярлык.

Комментарии (0)

Может, что-то вроде этого:

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
)
Комментарии (0)

Здесь's более простой вариант по сути один и тот же файл.

@echo off
break off
title C:\Windows\system32\cmd.exe
cls

:cmd
set /p cmd=C:\Enter Command:

%cmd%
echo.
goto cmd
Комментарии (1)

Сделать текст в блокноте или любом текстовом редакторе на ваш выбор. Открыть блокнот, написать этот краткий команда "УМК.ехе" без цитату и сохранить ее в качестве УМК.летучая мышь.

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

Комментарии (0)

это может быть решение, я сделал что-то подобное, но это не похоже на работу например, если необходимая функция требует прав администратора, он должен попросить вас перезапустить его в качестве администратора.

@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
Комментарии (0)