无法弄清楚这段代码到底做了什么

问题描述 投票:0回答:2

我正在尝试通过 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"
    :--------------------------------------

对编程有一定的了解。但是我想确定这是强制管理员权限运行/加载 Java 代码的部分。

OR 它是否尝试做其他事情但失败了,然后请求管理员权限为非管理员用户运行应用程序。

我需要正确理解它才能继续进行 Windows 故障排除或任何其他操作,使其适用于非管理员用户。

请帮助正确翻译。 (三是应用程序创建者的支持较少以及我是系统部署人员而不是程序员)

windows batch-file admin
2个回答
2
投票
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
没有执行,执行“跳过”到
:gotAdmin
.

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"

删除 shell 脚本并设置状态,这将使脚本的其余部分正常运行。

代码正在尝试做一些需要管理员权限的事情,如果失败,它将向用户请求管理员权限


0
投票

@stjepano,如果管理员权限被拒绝怎么办,这意味着用户在调用 UAC 时被迫单击“否”,因为用户没有任何人可以使用他们的管理员 ID,有没有办法让脚本说出以下内容?我将如何将这部分添加到脚本中?

cls 回声------------------------------------------------ ---------------------- echo ---------- 请求的管理权限已被拒绝-------- echo -------------- 所有功能将在 10 秒内停止 ------------------ 回声------------------------------------------------ ----------------------

超时 /T 10 /NOBREAK 出口

请注意,我曾尝试编辑脚本,但我最近开始学习脚本编写,但对此一无所获,因此我不得不寻求帮助。请帮我解决这个问题,我将不胜感激......

我尝试在 UACPrompt 下添加它,但无论我接受与否,我想添加的部分总是出现......我现在很迷茫

© www.soinside.com 2019 - 2024. All rights reserved.