Batch file 如何最小化升高的控制台窗口?

Batch file 如何最小化升高的控制台窗口?,batch-file,inno-setup,Batch File,Inno Setup,我正在使用有效负载调用Sample.bat,我希望在调用Sample.bat时最小化窗口。在这一行: @echo off if _%1_==_payload_ goto :payload :getadmin echo %~nx0: elevating self set vbs=%temp%\getadmin.vbs echo Set UAC = CreateObject^("Shell.Application"^) >> "

我正在使用有效负载调用Sample.bat,我希望在调用Sample.bat时最小化窗口。

在这一行:

@echo off
if _%1_==_payload_  goto :payload

:getadmin

    echo %~nx0: elevating self
    set vbs=%temp%\getadmin.vbs
    echo Set UAC = CreateObject^("Shell.Application"^)                >> "%vbs%"
    echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
goto :eof

:payload

    echo %~nx0: running payload with parameters:
    echo %*
    echo ---------------------------------------------------
    echo ADM is launching. DO NOT CLOSE THIS WINDOW.
    cd /d %2
    shift
    shift
    sample.bat
goto :eof

exit
您使用了对象的方法,该方法使用第五个参数(
vShow
)来建议最初如何显示应用程序窗口。您已使用该参数值1,其描述为(等于):

使用普通窗口打开应用程序。如果窗口最小化 或最大化,系统将其恢复到其原始大小和 位置

因此,首先,我将尝试将
vShow
参数的值更改为7,其描述为(等于):

用最小化的窗口打开应用程序。活动窗口将保持活动状态

对于您的脚本,这意味着将上面的行替换为:

echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
                                                                ↑
                                                              vShow

请注意,我还没有对此进行测试。

start/min有效吗?如果使用start命令调用批处理文件,则无效。但就我而言,我是通过Payloads来称呼它的,不管怎样,你的目标是什么?我这么问是因为你可以扔掉这个脚本,启动一个升级的应用程序。直接从Inno设置。也最小化。背后的想法是直接打开高架窗最小化。我不确定这是否是你想要的。谢谢特拉玛,这个解决方案对我很有效。它在不到几分之一秒的时间内,在最大化窗口中打开一个提升窗口。然后将其最小化,直到批处理文件中有任何操作。不客气!但是,如果你描述一下你的总体目标,我们可以尝试调整一下。您在脚本中执行的操作可以用Inno设置中的本机代码替换(它具有
ShellExec
函数,其作用与脚本中的
Shell.ShellExecute
方法相同)。我配置的Inno设置在C:ProgramFiles中打包和部署所有批处理文件,我已经为桌面上的批处理文件创建了图标,它执行一些操作。这就是我不希望在inno设置中配置它的原因。希望我的要求是明确的
echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 7 >> "%vbs%"