blak3r / Rushyo's solution works fine for everything except Windows 8. Running AT on Windows 8 results in:
The AT command has been deprecated. Please use schtasks.exe instead.
The request is not supported.
(see screenshot #1) and will return %errorLevel% 1.
Research
So, I went searching for other commands that require elevated permissions. rationallyparanoid.com had a list of a few, so I ran each command on the two opposite extremes of current Windows OSs (XP and 8) in the hopes of finding a command that would be denied access on both OSs when run with standard permissions.
Eventually, I did find one - NET SESSION. A true, clean, universal solution that doesn't involve:
- the creation of or interaction with data in secure locations
- analyzing data returned from
FORloops - searching strings for "Administrator"
- using
AT(Windows 8 incompatible) orWHOAMI(Windows XP incompatible).
Each of which have their own security, usability, and portability issues.
Testing
I've independently confirmed that this works on:
- Windows XP, x86
- Windows XP, x64
- Windows Vista, x86
- Windows Vista, x64
- Windows 7, x86
- Windows 7, x64
- Windows 8, x86
- Windows 8, x64
(see screenshot #2)
Implementation / Usage
So, to use this solution, simply do something like this:
@echo off
goto check_Permissions
:check_Permissions
echo Administrative permissions required. Detecting permissions...
net session >nul 2>&1
if %errorLevel% == 0 (
echo Success: Administrative permissions confirmed.
) else (
echo Failure: Current permissions inadequate.
)
pause >nul
Available here, if you're lazy:https://dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat
Explanation
NET SESSION is a standard command used to "manage server computer connections. Used without parameters, [it] displays information about all sessions with the local computer."
So, here's the basic process of my given implementation:
-
@echo off- Disable displaying of commands
-
goto check_Permissions- Jump to the
:check_Permissionscode block
- Jump to the
-
net session >nul 2>&1- Run command
- Hide visual output of command by
- Redirecting the standard output (numeric handle 1 /
STDOUT) stream tonul - Redirecting the standard error output stream (numeric handle 2 /
STDERR) to the same destination as numeric handle 1
- Redirecting the standard output (numeric handle 1 /
-
if %errorLevel% == 0- If the value of the exit code (
%errorLevel%) is0then this means that no errors have occurred and, therefore, the immediate previous command ran successfully
- If the value of the exit code (
-
else- If the value of the exit code (
%errorLevel%) is not0then this means that errors have occurred and, therefore, the immediate previous command ran unsuccessfully
- If the value of the exit code (
- The code between the respective parenthesis will be executed depending on which criteria is met
Screenshots
![[imgur]](http://i.imgur.com/01irE.png)
NET SESSION on Windows XP x86 - Windows 8 x64:
![[imgur]](http://i.stack.imgur.com/cAAIj.png)
1961

被折叠的 条评论
为什么被折叠?



