2016-07-28 11 views
3

他のスレッドで提案されている余分なVBSファイルや昇格されたショートカットを使用せずに、実行中のバッチを自動昇格させる簡単で信頼できる方法を導きます。 javascript経由でバッチからUACダイアログを呼び出すことで、簡単な簡単なコードが保証されます。javascriptを使用して管理者としてバッチを実行する簡単な方法

はいを​​ダイアログで選択された場合、自動以下のスクリプトは、正しく管理者権限をユーザーに上昇、しかし(CMDウィンドウの外で)エラーダイアログのポップアップ「Windowsは 『 TEST.BAT』見つけることができません」。ファイルへのパスにスペースが含まれている可能性がありますか?どのようにコードを修正するか、このエラーポップアップを抑制する?

@echo off 
:: test admin rights 
>nul 2>&1 net file 
echo '%errorlevel%' 
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute("%~nx0", '', '', 'runas', 1);close();" 
:: test admin rights 
>nul 2>&1 net file 
echo '%errorlevel%' 
if !errorlevel! equ 0 echo Hello >%temp%\tst.txt 
exit /b 

答えて

0

私はスクリプトを修正しましたが、今はうまく動作します。私の研究によれば、これはどこにでも公開されている実行中のバッチで、そのCmdセッションの期間中、通常のユーザー管理者権限を動的に与える最も簡単で信頼できる方法です。

機能、ハイブリッドバッチ& VBS構成、追加ファイル、昇格したショートカットを使用する必要はありません。それはWindowsにネイティブです。ユーザーは:usercodeセクションに独自のタスクコードを追加して、バッチで実行することができます。

@echo off 
setlocal EnableDelayedExpansion 
:: test and acquire admin rights 
cd /d %~dp0 & echo/ 
if not "%1"=="UAC" (
    >nul 2>&1 net file && echo Got admin rights || (echo No admin rights &^
MSHTA "javascript: var shell = new ActiveXObject('shell.application'); shell.ShellExecute("%~snx0", 'UAC', '', 'runas', 1);close();")) 
:: re-test admin rights 
echo/ & >nul 2>&1 net file && (echo Got admin rights & echo/) || (echo No admin rights. Exiting... & goto :end) 

:usercode 
:: add your code here 
echo Performing admin tasks 
echo Hello >C:\test.txt 

:end 
timeout /t 5 >nul 
exit /b 
+0

私はまだそれが「%〜dpsnx0」= /私の作業ディレクトリを「%〜snx0」と、ない仕事をしていないことを得ることができない、それはまだだ、それを文句を言うように、私のスクリプトのディレクトリと同じではありません私の.cmdを見つけることができません - 私はまた、MSHTAがパスからスラッシュを取り除くことに気付きました。 - 私はPOPD "%〜dp0" –

関連する問題