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 つのコマンド プロンプトを開きました。1 つは管理者モード、もう 1 つは通常モードです。このスクリプトを管理者モードでコマンド プロンプトから実行すると、成功します。しかし、通常モードでは、最初に管理者モードに切り替えるためのウィンドウが表示され、それを押しますYes。次に、以下のエラーが発生します。

ここに画像の説明を入力

誰でも私に正しいコードを教えてもらえますか。行でエラーが発生していますshell.run "ExtractFiles.bat"。助けてください!

要件についても言及したように、別のアプローチも歓迎されます。この問題では、bat ファイルを管理モードで実行し、通常モードで失敗する方法がわかりません。

4

3 に答える 3

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
于 2013-01-11T17:02:32.320 に答える
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

コマンドプロンプトに何を入力しますか?それは...ですか...

InstallACS.vbs ExtractFiles.bat

あなたのスクリプトはXP x64で問題なく動作します(それが重要な場合)、販売からでもコンソールからでも、引数の有無にかかわらず動作する方法を気にしないでください。

于 2013-01-12T18:33:15.887 に答える