46

DLLを登録する必要があるバッチファイルを実行する必要があります。バッチファイルが「管理者」としてコマンドプロンプトを開始していないため、DLL登録が失敗しています。

バッチファイルを介して管理者として 「コマンドプロンプト」を開始する方法はありますか?

環境:Win7 / Vista

4

11 に答える 11

47

このスクリプトはトリックを行います!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:
于 2015-03-13T07:19:37.777 に答える
12

管理者権限で2番目を起動するには、最初に別のバッチファイルを使用する必要がある場合があります。

最初の使用で

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

さらに読むと、プロンプトでパスワードを入力できる必要があります。この機能はセキュリティ上の理由でロックダウンされているため、パスワードをパイプすることはできません。

あなたはpsexecでもっと運がいいかもしれません。

于 2012-07-17T14:47:03.777 に答える
8

Ctrl+を押しShiftてショートカットをダブルクリックすると、昇格されたプロセスとして実行されます。

スタートメニューからも動作します。

于 2015-05-18T08:13:06.353 に答える
7

(これは@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

これにより、バッチファイル自体が昇格したユーザーとして実行されます。特権コードに2つのパラメーターを追加します。

  • ワードpayload、これがペイロード呼び出しであること、つまりすでに昇格されていることを示します。そうでなければ、新しいプロセスを何度も開くことになります。

  • メインスクリプトが呼び出されたディレクトリパス。Windowsは常に "%windir%\ system32"で昇格されたcmd.exeを起動するため、元のパスが何であったかを簡単に知る方法はありません(そして、コードに触れることなくスクリプトをコピーする機能を保持します)

注:残念ながら、何らかの理由でshiftが機能しないため%*、実際の引数を渡す必要がある場合は、例(%1 %2 %3 %4 %5 %6 %7 %8 %9)で使用した醜い表記に頼る必要があります。これにより、最大9つの引数の制限も発生します。

于 2012-08-22T12:08:53.823 に答える
6

スクリプトファイルが非システムドライブ(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
于 2017-10-06T18:47:06.093 に答える
5

これは、Windows 7から10で、どこからでも(ブラウザーを含む)アプリまたはファイルをキックスタートするとき、およびどこからでもファイルにアクセスするときに、パラメーターを使用して機能します。( YOUR 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
于 2015-12-12T00:20:54.100 に答える
4

バッチファイルにリンクするショートカットを使用できます。ショートカットのプロパティに移動し、[詳細]を選択してから、[管理者として実行]を選択します。

次に、バッチファイルを非表示にして、ショートカットを実行します。

このようにして、ショートカットに独自のアイコンを設定することもできます。

于 2013-07-05T22:38:33.180 に答える
2

多分このようなもの:

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
)
于 2014-05-23T09:34:59.550 に答える
1

user2549366が以前に提案したように、「バッチファイルにリンクするショートカットを使用できます。」ただし、ショートカットの[プロパティ]-> [互換性]タブで、管理者として実行が無効になっている可能性があります。

したがって、代わりに「file.bat-ショートカット」を右クリックして、->[プロパティ]->[ショートカット]タブ->[詳細設定]に移動し、[管理者として実行]をクリックします。その後、ショートカットを実行できます。

于 2015-12-20T09:10:33.723 に答える
0

これは、本質的に同じファイルのより単純なバージョンです。

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

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

%cmd%
echo.
goto cmd
于 2017-08-21T07:42:31.627 に答える
-4

メモ帳または任意のテキストエディタを使用してテキストを作成します。メモ帳を開き、この短いコマンド「cmd.exe」を引用符なしで記述し、cmd.batとして保存します。

cmd.batをクリックし、「管理者として実行」を選択します。

于 2016-07-24T17:28:45.810 に答える