DLLを登録する必要があるバッチファイルを実行する必要があります。バッチファイルが「管理者」としてコマンドプロンプトを開始していないため、DLL登録が失敗しています。
バッチファイルを介して管理者として 「コマンドプロンプト」を開始する方法はありますか?
環境:Win7 / Vista
DLLを登録する必要があるバッチファイルを実行する必要があります。バッチファイルが「管理者」としてコマンドプロンプトを開始していないため、DLL登録が失敗しています。
バッチファイルを介して管理者として 「コマンドプロンプト」を開始する方法はありますか?
環境:Win7 / Vista
このスクリプトはトリックを行います!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:
管理者権限で2番目を起動するには、最初に別のバッチファイルを使用する必要がある場合があります。
最初の使用で
runas /noprofile /user:mymachine\administrator yourbatchfile.bat
さらに読むと、プロンプトでパスワードを入力できる必要があります。この機能はセキュリティ上の理由でロックダウンされているため、パスワードをパイプすることはできません。
あなたはpsexecでもっと運がいいかもしれません。
Ctrl+を押しShiftてショートカットをダブルクリックすると、昇格されたプロセスとして実行されます。
スタートメニューからも動作します。
(これは@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つの引数の制限も発生します。
スクリプトファイルが非システムドライブ(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
これは、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
バッチファイルにリンクするショートカットを使用できます。ショートカットのプロパティに移動し、[詳細]を選択してから、[管理者として実行]を選択します。
次に、バッチファイルを非表示にして、ショートカットを実行します。
このようにして、ショートカットに独自のアイコンを設定することもできます。
多分このようなもの:
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
)
user2549366が以前に提案したように、「バッチファイルにリンクするショートカットを使用できます。」ただし、ショートカットの[プロパティ]-> [互換性]タブで、管理者として実行が無効になっている可能性があります。
したがって、代わりに「file.bat-ショートカット」を右クリックして、->[プロパティ]->[ショートカット]タブ->[詳細設定]に移動し、[管理者として実行]をクリックします。その後、ショートカットを実行できます。
これは、本質的に同じファイルのより単純なバージョンです。
@echo off
break off
title C:\Windows\system32\cmd.exe
cls
:cmd
set /p cmd=C:\Enter Command:
%cmd%
echo.
goto cmd
メモ帳または任意のテキストエディタを使用してテキストを作成します。メモ帳を開き、この短いコマンド「cmd.exe」を引用符なしで記述し、cmd.batとして保存します。
cmd.batをクリックし、「管理者として実行」を選択します。