2016-02-24 265 views
0

我試圖部署一個應用程序通過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

這個Java是如何精確地相關管理權限? – Stultuske

+0

:安裝 set GAS_BIN =%〜dp0 cd%GAS_BIN% cd .. 組GAS_HOME =%CD% CD 「%GAS_HOME%」 組JAVA_OPTS = -Xms128m -Xmx512m -XX:MaxPermSize參數= 128M 組CLASSPATH =倉/ * 組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 :完成 endlocal – user879

+0

它的代碼的後半部分 – user879

回答

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,則該命令將失敗。如果命令失敗: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腳本並設置狀態,使腳本的其餘部分能夠正常運行。

的代碼試圖做一些需要管理員權限,如果失敗,將要求用戶