Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在VB6中使用Shell运行批处理文件会导致循环_Batch File_Cmd_Vb6 - Fatal编程技术网

Batch file 在VB6中使用Shell运行批处理文件会导致循环

Batch file 在VB6中使用Shell运行批处理文件会导致循环,batch-file,cmd,vb6,Batch File,Cmd,Vb6,我有一个bat文件,用于检查是否需要UAC管理员,如果需要,则提示UAC,然后复制一些dll文件: @echo off :------------------------------------- REM --> Check for permissions >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" REM --> If error flag

我有一个bat文件,用于检查是否需要UAC管理员,如果需要,则提示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部分,仍然存在同样的问题

真的坚持这一点,任何帮助感谢

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

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