无法弄清楚这段代码到底做了什么
Can't figure out what this code does exactly
我正在尝试通过 sccm 将应用程序部署到 windows 7 个(大约 300 个)。该应用程序基于 Java jre-7u55。
部署或应用程序没有问题。部署有效,但问题是应用程序正在提升 windows UAC 的非管理员和管理员用户。并且应用程序将只允许 运行 管理员用户而不是普通用户认为他们提供了正确的凭据。 (这里提到的应用程序是由 bat 文件创建的快捷方式,它将加载 java 二进制文件、程序内容)
这是bat文件..
@echo off
setlocal
setlocal enabledelayedexpansion
:: 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"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
:install
set GAS_BIN=%~dp0
cd %GAS_BIN%
cd ..
set GAS_HOME=%cd%
cd "%GAS_HOME%"
set JAVA_OPTS=-Xms128m -Xmx512m -XX:MaxPermSize=128M
set CLASSPATH=bin/*
set JAVA_HOME=C:/Java/jre1.7.0.55
set PATH=%JAVA_HOME%/bin;%PATH%
start "GAS STANDALONE" "%JAVA_HOME%\bin\javaw" %JAVA_OPTS% -classpath "%CLASSPATH%" com.airbus.agsm.core.launcher.ServerMain
:done
endlocal
我关心的是下面的代码(我知道这是负责UAC的东西) uac代码
@echo off
setlocal
setlocal enabledelayedexpansion
:: 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"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
我对编程有一定的了解。但是我想确定这是强制管理员权限 run/load Java 代码的部分..
或者 它是否在尝试执行其他操作但失败了,然后请求 运行 为非管理员用户设置应用程序的管理员权限。
我需要正确理解它才能继续进行 windows 故障排除或任何其他操作,使其适用于非管理员用户。
请帮忙正确解读。 (三是应用程序创建者的支持较少以及我是系统部署人员而不是程序员)
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 )
这尝试 运行 命令 cacls
以 %SYSTEMROOT%\system32\config\system
作为参数。如果当前用户有权限,此命令将成功,因此 %errorlevel%
将为 0,如果当前用户没有足够的权限,则此命令将失败,因此 %errorlevel%
将不为 0。如果命令失败 :UACPrompt
子程序被调用。
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
Shell 脚本已创建。此 shell 脚本请求 UAC 更高级别的权限,然后再次调用 bat 脚本,但这次具有更高级别的权限。代码执行 shell 脚本并以 exit /B
命令终止。
shell脚本再次调用了BAT代码,但是由于我们现在有更高的权限:UACPrompt
没有执行,执行是"skipped"到:gotAdmin
。
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
删除 shell 脚本并设置状态,使脚本的其余部分正常 运行。
该代码正在尝试执行需要管理员权限的操作,如果失败,它将向用户请求管理员权限
我正在尝试通过 sccm 将应用程序部署到 windows 7 个(大约 300 个)。该应用程序基于 Java jre-7u55。 部署或应用程序没有问题。部署有效,但问题是应用程序正在提升 windows UAC 的非管理员和管理员用户。并且应用程序将只允许 运行 管理员用户而不是普通用户认为他们提供了正确的凭据。 (这里提到的应用程序是由 bat 文件创建的快捷方式,它将加载 java 二进制文件、程序内容)
这是bat文件..
@echo off
setlocal
setlocal enabledelayedexpansion
:: 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"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
:install
set GAS_BIN=%~dp0
cd %GAS_BIN%
cd ..
set GAS_HOME=%cd%
cd "%GAS_HOME%"
set JAVA_OPTS=-Xms128m -Xmx512m -XX:MaxPermSize=128M
set CLASSPATH=bin/*
set JAVA_HOME=C:/Java/jre1.7.0.55
set PATH=%JAVA_HOME%/bin;%PATH%
start "GAS STANDALONE" "%JAVA_HOME%\bin\javaw" %JAVA_OPTS% -classpath "%CLASSPATH%" com.airbus.agsm.core.launcher.ServerMain
:done
endlocal
我关心的是下面的代码(我知道这是负责UAC的东西) uac代码
@echo off
setlocal
setlocal enabledelayedexpansion
:: 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"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:--------------------------------------
我对编程有一定的了解。但是我想确定这是强制管理员权限 run/load Java 代码的部分..
或者 它是否在尝试执行其他操作但失败了,然后请求 运行 为非管理员用户设置应用程序的管理员权限。
我需要正确理解它才能继续进行 windows 故障排除或任何其他操作,使其适用于非管理员用户。
请帮忙正确解读。 (三是应用程序创建者的支持较少以及我是系统部署人员而不是程序员)
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 )
这尝试 运行 命令 cacls
以 %SYSTEMROOT%\system32\config\system
作为参数。如果当前用户有权限,此命令将成功,因此 %errorlevel%
将为 0,如果当前用户没有足够的权限,则此命令将失败,因此 %errorlevel%
将不为 0。如果命令失败 :UACPrompt
子程序被调用。
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
Shell 脚本已创建。此 shell 脚本请求 UAC 更高级别的权限,然后再次调用 bat 脚本,但这次具有更高级别的权限。代码执行 shell 脚本并以 exit /B
命令终止。
shell脚本再次调用了BAT代码,但是由于我们现在有更高的权限:UACPrompt
没有执行,执行是"skipped"到:gotAdmin
。
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
删除 shell 脚本并设置状态,使脚本的其余部分正常 运行。
该代码正在尝试执行需要管理员权限的操作,如果失败,它将向用户请求管理员权限