【发布时间】: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