0

VB scripting对我来说完全陌生,但今天降落在一个情况下写一个小。我需要管理员权限才能运行我的.bat文件。因此,如果没有管理员权限,我将尝试提升为管理员权限。在 SO 和 Google 的帮助下,我达到了:

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 个命令提示符。一个处于管理员模式,另一个正常。在管理员模式下通过命令提示符运行此脚本时,我得到了成功。但是在正常模式下,首先我会看到一个切换到管理员模式的窗口,然后按下Yes它。然后我得到以下错误:

在此处输入图像描述

谁能指出我正确的代码。我遇到错误shell.run "ExtractFiles.bat"。请帮忙!

正如我也提到的要求,也欢迎采用不同的方法。在这个问题中,我不确定如何在管理员模式下运行 bat 文件并在正常模式下失败。

4

3 回答 3

0

你在命令提示符下输入了什么?是吗...

InstallACS.vbs ExtractFiles.bat

您的脚本在 XP x64 上运行得很好(如果这很重要),不管我将如何运行它 - 从销售或控制台运行,也可以使用和不使用参数。

于 2013-01-12T18:33:15.887 回答
0

根据您启动 VBScript 的方式,脚本所在的目录不一定是工作目录。尝试这个:

Set fso = CreateObject("Scripting.FileSystemObject")
scriptDir = fso.GetParentFolderName(WScript.ScriptFullName)
shell.run "%COMSPEC% /c """ & fso.BuildPath(scriptDir, "ExtractFiles.bat") & """"
于 2013-01-11T23:41:27.137 回答
0

将 Admin 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
于 2013-01-11T17:02:32.320 回答