【问题标题】:How to minimize the elevated console window?如何最小化提升的控制台窗口?
【发布时间】:2014-12-23 06:40:18
【问题描述】:
@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

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

【问题讨论】:

  • start /min 工作吗?
  • 不,如果我们使用启动命令调用批处理文件,它会起作用。但就我而言,我是通过有效载荷调用它
  • 无论如何,你的目标是什么?我问是因为你可以扔掉这个脚本并启动一个提升的应用程序。直接来自 Inno Setup。也最小化了。

标签: batch-file inno-setup


【解决方案1】:

在这一行:

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

您使用了Shell 对象的ShellExecute 方法,该方法使用第五个参数(vShow) 就应用程序窗口的初始显示方式给出了建议。你已经使用了那个参数值1,它被描述为(等于SW_SHOWNORMAL):

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

所以首先我会尝试将vShow 参数的值更改为7,它被描述为(等于SW_SHOWMINNOACTIVE):

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

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

echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 7 >> "%vbs%"

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

【讨论】:

  • 背后的想法是直接最小化打开提升的窗口。我不确定这是否是您要找的。​​span>
  • 感谢 TLama,该解决方案对我有用。它在不到几分之一秒的时间内在最大化窗口中打开一个提升的窗口。然后将其最小化,直到批处理文件中有任何操作。
  • 不客气!但是,如果您描述了您的总体目标,我们可以尝试对其进行调整。您在脚本中所做的可以用 Inno Setup 中的本机代码替换(它具有 ShellExec 函数,与脚本中的 Shell.ShellExecute 方法相同)。
  • 我配置的inno设置,打包和部署C:ProgramFiles中的所有批处理文件,我在桌面上为批处理文件创建了图标,它做了一些操作。这就是我不希望它在 inno setup 中配置的原因。希望我的要求很明确
猜你喜欢
  • 2014-06-24
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
相关资源
最近更新 更多