我正在尝试通过sccm将应用程序部署到Windows 7个(大约300个)。该应用程序基于Java jre-7u55。 部署或应用程序没有问题。部署工作,但问题是nonadmin和管理员用户应用程序正在推广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"
:--------------------------------------
我对编程有一定的了解。但我想确保这是强制管理员权限运行/加载Java代码的部分..
或是否尝试执行其他操作并失败,然后请求为非管理员用户运行应用程序的管理员权限。
我需要正确理解它才能继续进行Windows故障排除或其他任何操作,以使其适用于非管理员用户。
请帮助正确翻译。 (三是来自应用程序创建者以及我是系统部署人员而非程序员的支持较少)
答案 0 :(得分:1)
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.如果命令失败{{1调用子程序。
:UACPrompt
创建了Shell脚本。此shell脚本请求UAC更高级别的权限,然后再次调用bat脚本,但这次具有更高级别的权限。代码执行shell脚本并以: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脚本再次调用BAT代码,但由于我们现在具有更高的权限exit /B
未执行,执行被“跳过”到:UACPrompt
。
:gotAdmin
删除shell脚本并设置状态,使脚本的其余部分能够正常运行。
代码正在尝试执行需要管理员权限的操作,如果失败则会请求用户提供管理员权限