2017-05-10 12 views
0

おはよう、バッチ管理者のアクセス許可チェック

管理者権限でバッチが実行されているかどうかを確認しようとしています。 私が確認するために、このコマンドが見つかりました:代わりにopenfilesの

openfiles >nul 2>&1 
if NOT %errorLevel% == 0 
... 

やネットセッションを。

通常のコマンドプロンプトを使用すると、管理者としてコマンドプロンプトを開き、エラーを返すとすべて動作します。

問題は、昇格された権限コマンドプロンプトで2つのバッチを実行しようとすると表示されます。 最初のバッチが正しく実行され、2番目の戻り権限エラーです。

何が間違っていますか?

+0

あなたが表示するコマンドに間違いはありません。問題は他の場所にあります。私はerrorlevelの代わりに 'openfiles> nul 2>&1 ||をチェックする代わりに条件付き実行を使用したいwhatever' – LotPings

+0

返事ありがとう、私は試しましたが、それは同じです。 –

+0

問題はまだ表示されていないコードのどこかにあります。私のヒントは問題に関連していませんでした。 [mcve]が何であるかをお読みください。 – LotPings

答えて

0

それはあなたが使っている方法として、コンパクトとしてはありませんが、以下のように、私は過去に何度も成功裏に使用されてきた別の方法は次のとおりです。

IF EXIST %SYSTEMROOT%\SYSTEM32\WDI\LOGFILES GOTO GOTADMIN 
[Whatever commands you want to run if not running as admin] 
:GOTADMIN 
[Whatever commands you want to run if running as admin] 

デフォルトでは、Windowsのみできます、これは動作します高い権限でWDIディレクトリにアクセスします。したがって、存在するはずの別のディレクトリをそのディレクトリ内で探すようにスクリプトに指示することによって、管理者として実行中かどうかを検出することができます。はいの場合は、LOGFILESが存在し、Trueを返します。いいえの場合、WDIファイルへのアクセスは許可されません。したがって、LOGFILESが存在することは認識されず、Falseが返されます。

これは、WDIディレクトリの既定のセキュリティアクセス許可が変更されていない場合にのみ有効ですが、私の経験からはほとんどのインストールでこれらのアクセス許可が変更されている可能性はほとんどありません。また、WDIディレクトリ内のLOGFILESディレクトリが削除されていないか、名前が変更されていないことが必要ですが、WDIディレクトリの目的の不可欠な部分であるため、これはほとんど起こりそうにありません。

私はこれをWindows 7,8、8.1、および10で動作することをテストして確認しました。私はVistaでテストしていませんが、Vistaとどのように似ているかによって動作すると思います。既定ですべてのコマンドプロンプトがそのバージョンのWindowsで最大高度で実行されるため、このメソッドをXPで使用します。

+0

この質問は、OPが十分な情報を提供していないため、終了する可能性があります。私はあなたがこれを[この質問](http://stackoverflow.com/q/4051883/886887)の回答として再投稿することをお勧めします。それはもっと話題になり、それを必要とする読者が見つける可能性が高くなります削除するには、削除します。 –

+0

お返事ありがとうございます。返事が遅れました。 このチェックは正しく機能します。 –

関連する問題