【问题标题】:Running batch file using Shell with VB6 causes loop使用带有 VB6 的 Shell 运行批处理文件会导致循环
【发布时间】:2014-12-31 17:25:26
【问题描述】:

我有一个bat文件,检查是否需要UAC admin,如果需要,提示UAC,然后复制一些dll文件:

@echo off
:-------------------------------------
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
if /i "%PROCESSOR_IDENTIFIER:~0,3%"=="X86" (
    echo system is x86
    copy .\*.dll %windir%\system32\
    regsvr32 /s /c %windir%\system32\filetoregister.dll
    ) else (
        echo system is x64
        copy .\*.dll %windir%\SysWOW64\
        regsvr32 /s /c %windir%\SysWOW64\filetoregister.dll
    )

当从 Windows 资源管理器运行时,这工作正常,如果需要 UAC,它会提示等,完全符合我的要求,但是,如果我尝试从 VB6 程序运行批处理文件:

Dim FilePath As String
FilePath = App.Path & "\setup\install.bat"
ShellVal = Shell(FilePath, vbNormalFocus)

如果不需要 UAC,它可以正常工作,但如果需要,它会请求许可,在选择管理员帐户后,它会进入打开和关闭 cmd 窗口的循环。关闭计算机通常是杀死它的唯一方法

我试过只使用bat文件的UAC部分,还是一样的问题

真的坚持这个,任何帮助表示赞赏!

【问题讨论】:

    标签: batch-file cmd vb6


    【解决方案1】:

    已解决 我通过从批处理文件中删除管理请求并在 VB6 程序获取管理员权限(如果需要),然后运行批处理文件

    Dim FilePath As String
        FilePath = App.Path & "\setup\install.bat"
        ShellExecute 0, "runas", FilePath, Command & "/admin", vbNullString, SW_SHOWNORMAL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多