2012-07-17 121 views
17

我需要運行需要註冊DLL的批處理文件。 DLL註冊失敗,因爲批處理文件未以「管理員」身份啓動命令提示符。如何創建批處理文件以管理員身份運行cmd

有什麼辦法,啓動「命令提示符」爲管理員通過批處理文件。

環境:Win7的/ Vista的

+1

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

+0

參見[我怎麼能自動提升我的批處理文件,所以它請求來自UAC管理員權限,如果需要?](http://stackoverflow.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

回答

5

您可能需要使用另一個批處理文件率先推出第二擁有管理員權限。

在第一次使用

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

7

(這是基於@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

您可以使用鏈接到批處理文件的快捷方式。只需進入快捷方式的屬性並選擇高級,然後「以管理員身份運行」。

然後只是使該批處理文件隱藏,並運行快捷方式。

這樣,您甚至可以爲快捷方式設置自己的圖標。

+1

我的'以管理員身份運行「複選框被禁用。我怎樣才能克服它? – 2014-02-24 11:51:04

+0

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

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 
1

也許是這樣的:

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 
) 
22

這個腳本的伎倆!只需將其粘貼到您的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

3

按下Ctrl鍵+雙擊快捷方式作爲提升的進程中運行。

也可以從開始菜單工作。

3

這適用於我在`在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` 
0

由於user2549366之前的建議,「你可以用鏈接到該批處理文件的快捷方式。」但在快捷方式的「屬性」 - >「兼容性」選項卡中,以管理員身份運行可能會被禁用。

因此,您只需右鍵單擊您的「file.bat - 快捷方式」,然後轉到 - >屬性 - >快捷方式選項卡 - >高級,然後您可以單擊以管理員身份運行。之後,您可以執行快捷方式。

-3

使用記事本或任何文本編輯器選擇一個文本。打開記事本,寫下這個不帶引號的簡短命令「cmd.exe」並將其另存爲cmd.bat。

點擊cmd.bat並選擇「以管理員身份運行」。

0

下面是基本上相同的文件的更簡單的版本。

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

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

%cmd% 
echo. 
goto cmd 
2

防止當腳本文件駐留在非系統驅動器(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 
相關問題