2013-01-11 1 views
0

VB scripting은 완전히 외계인이지만 현재는 작은 글자로 쓰려고합니다. 내 .bat 파일을 실행하려면 관리자 권한이 필요합니다. 따라서 관리자 권한이없는 경우 관리자 권한으로 승격하려고합니다. SO와 구글의 도움으로 나는 개까지 도달 : 여기 VB 스크립트에서 배치 파일을 실행하는 중 오류가 발생했습니다.

Function Length() 

Set WshShell = WScript.CreateObject("WScript.Shell") 
If WScript.Arguments.length = 0 Then 
    Set ObjShell = CreateObject("Shell.Application") 
    ObjShell.ShellExecute "wscript.exe", """" & WScript.ScriptFullName & """" & " RunAsAdministrator", , "runas", 1 
Else 
    Dim shell 
    set shell=createobject("wscript.shell") 
    shell.run "ExtractFiles.bat" 
End If 

End Function 

Length 

.vbsExtractFiles.bat은 같은 폴더에 저장됩니다. 나는 2 개의 명령 프롬프트를 열었다. 하나는 Admin 모드이고 다른 하나는 정상입니다. 관리 모드에서이 스크립트를 실행할 때 명령 프롬프트가 성공적으로 실행됩니다. 하지만 정상 모드에서 Admin 모드로 전환 할 창이 나오면 Yes을 누릅니다. 그 때 나는 오류가 아래 얻을 :

enter image description here

는 사람이 코드를 수정하는 날 지점 수 있습니다. 줄 shell.run "ExtractFiles.bat"에 오류가 발생했습니다. 도와주세요!

요구 사항을 언급 한 것처럼 다른 접근 방식도 환영합니다. 이 문제에서 관리자 모드로 박쥐 파일을 실행하고 정상 모드에서 실패 할 수 있는지 확실하지 않습니다.

답변

0

관리자 VBS 코드를 bat 파일에 추가하십시오. 그 일에 대한 나의 일상이 여기있다.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
:Admin <Return> [Needed] [Success] 
:: Check for Administrator privileges and request privileges if Needed 'true'. 
:::: Usage: call :Admin xReturn true 
:: Return success value, if user is Admin. Default `true` if Success not set. 
setlocal 
set "xVBUAC=%Temp%\AdminUAC.vbs" 
set "xSuccess=true" 
set "xAdmin=false" 
if not "%~3"=="" set "xSuccess=%~3" 

:: Check for Access 
::net session >nul 2>&1 
>nul 2>&1 "%SystemRoot%\system32\cacls.exe" "%SystemRoot%\system32\config\system" 
if %ErrorLevel% EQU 0 set "xAdmin=%xSuccess%" 

:: Execute UAC 
if /i not "%xAdmin%"=="%xSuccess%" if not "%~2"=="" if /i "%~2"=="true" (
    echo Set UAC = CreateObject^("Shell.Application"^) > "%xVBUAC%" 
    echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%xVBUAC%" 
    if exist "%xVBUAC%" (
     "%xVBUAC%" 
     rem if %ErrorLevel% EQU 5 echo Access Denied. Launching UAC. 
     del "%xVBUAC%" 
    ) 
) 
endlocal & if not "%~1"=="" set "%~1=%xAdmin%" 
goto :eof 

:: Example Admin check 

@echo off 
setlocal EnableExtensions 

call :Admin xReturn true 1 
if not "%xReturn%"=="1" goto End 

:: Do my .bat stuff here. 

goto End 

:: TODO Place the admin function here. 

:End 
0

당신이 VBScript를에게 스크립트가 반드시 작업 디렉토리가 아닌있는 디렉터리를 시작하는 방법에 따라 사용하는 방법. 이것을 시도하십시오 :

Set fso = CreateObject("Scripting.FileSystemObject") 
scriptDir = fso.GetParentFolderName(WScript.ScriptFullName) 
shell.run "%COMSPEC% /c """ & fso.BuildPath(scriptDir, "ExtractFiles.bat") & """" 
0

명령 프롬프트에 입력 한 내용은 무엇입니까?

InstallACS.vbs ExtractFiles.bat 

스크립트가 XP x64의에서 잘 작동합니다 ... 그 것이다 (경우에 중요) 나는 그것을 실행하겠습니다 얼마나 신경 쓰지 - 매각 또는 콘솔에서, 또한 함께와 인수없이 작동합니다.

관련 문제