如何创建批处理文件以管理员身份运行cmd

问题描述:

我需要运行需要注册DLL的批处理文件。 DLL注册失败,因为批处理文件未以“管理员”身份启动命令提示符。如何创建批处理文件以管理员身份运行cmd

有什么办法,启动“命令提示符”为管理员通过批处理文件。

环境:Win7的/ Vista的

+1

http://technet.microsoft.com/en-us/library/bb490994 – 2012-07-17 14:44:51

+0

参见[我怎么能自动提升我的批处理文件,所以它请求来自UAC管理员权限,如果需要?](http://*.com/questions/7044985/how-can-i-auto-elevate-my-batch-file-so-that-it-requests-from-uac-admin -rights) – GAThrawn 2013-05-13 14:50:17

+0

@EdGreaves是不是这个问题的链接? – notyou 2017-10-20 09:46:10

您可能需要使用另一个批处理文件率先推出第二拥有管理员权限。

在第一次使用

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

在进一步阅读,你必须能够在提示符下键入密码。出于安全原因,您无法输入密码,因为此功能被锁定。

您可能更喜欢psexec

+0

我会尽力实施您的解决方案, – JChan 2012-07-17 14:51:13

+0

我试过了上面的命令,但它询问我不会知道的管理员密码。 – JChan 2012-07-17 16:13:08

+0

@JChan看来你不能自动填写密码,此功能已被禁用,请参阅我更新的答案。 – 2012-07-17 16:23:37

(这是基于@DarkXphenomenon's answer,不幸遇到了一些问题。)

你需要这种包装中的封装代码:

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 

这使得批处理文件运行本身作为提升用户。它增加了两个参数的特权代码:

  • 字​​,以指示这是有效载荷呼叫,即已经升高。否则 它只会反复打开新的进程。

  • 目录主路径被调用的路径。由于事实的Windows 总是 开始升高cmd.exe,在“%WINDIR%\ SYSTEM32”,有知道什么 原始路径是(保留了无 感人各地复制你的脚本的能力没有简单的方法代码)

注:不幸的是,由于某种原因,shift不适合%*工作,所以如果你需要 通过实际的参数,你将不得不诉诸丑陋符号我在使用 示例(%1 %2 %3 %4 %5 %6 %7 %8 %9),这也带来了 的限制,最多9个参数

您可以使用链接到批处理文件的快捷方式。只需进入快捷方式的属性并选择高级,然后“以管理员身份运行”。

然后只是使该批处理文件隐藏,并运行快捷方式。

这样,您甚至可以为快捷方式设置自己的图标。

+1

我的'以管理员身份运行“复选框被禁用。我怎样才能克服它? – 2014-02-24 11:51:04

+0

嗯,不确定。那很有意思。 – user2549366 2018-02-06 08:48:05

这可能是一个解决方案,我做了类似的事情,但这个似乎并不工作 例如,如果必要的功能需要管理员权限,它应该要求您以管理员身份重新启动它。

@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 

也许是这样的:

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 
) 

这个脚本的伎俩!只需将其粘贴到您的bat文件的顶部即可。如果要查看脚本的输出,请在批处理文件的底部添加一个“暂停”命令。

现在稍微编辑此脚本以支持命令行参数。

@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: 
+0

此代码正在启用​​Windows更新服务。但不能用于禁用Windows更新服务'sc stop wuauserv&sc config wuauserv start = disabled' – BlackFire 2017-01-02 18:24:31

+0

注意:如果从不同驱动器的子目录运行,此代码有时不起作用。在这里看到我的问题:https://superuser.com/questions/1192426/batch-file-only-runs-properly-from-c-drive/1192427#1192427 – Blaine 2017-03-26 02:58:48

按下Ctrl键+双击快捷方式作为提升的进程中运行。

也可以从开始菜单工作。

这适用于我在`在Windows 7至10与参数,也踢任何地方(包括浏览器),并从任何地方访问文件启动应用程序或文件,用您的代码替换(您的BATCH SCRIPT HERE锚)溶液有助于:)

 @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` 

由于user2549366之前的建议,“你可以用链接到该批处理文件的快捷方式。”但在快捷方式的“属性” - >“兼容性”选项卡中,以管理员身份运行可能会被禁用。

因此,您只需右键单击您的“file.bat - 快捷方式”,然后转到 - >属性 - >快捷方式选项卡 - >高级,然后您可以单击以管理员身份运行。之后,您可以执行快捷方式。

使用记事本或任何文本编辑器选择一个文本。打开记事本,写下这个不带引号的简短命令“cmd.exe”并将其另存为cmd.bat。

点击cmd.bat并选择“以管理员身份运行”。

下面是基本上相同的文件的更简单的版本。

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

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

%cmd% 
echo. 
goto cmd 

防止当脚本文件驻留在非系统驱动器(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