С течением времени (к счастью) становится более привычным найти установщики командной строки для большинства программ с графическим интерфейсом Windows, поэтому вы можете выполнять пакетную и автономную установку консоли.

Но иногда я обнаружил странное поведение с несколькими установщиками, когда запрашивал (через -? -help ... и т.д.) их синтаксис использования: они открывают новые окна консоли (cmd), показывают (быстро) синтаксис и параметры ... и снова закройте быстро, чтобы у пользователя не было времени что-либо прочитать .

Пример: Установщик Bitvise SSH (доступна пробная версия ). Я запрашиваю синтаксис, поскольку его документы говорят:

BvSshServer-Inst.exe -?

Откроется новая консоль cmd со словами:

This program will install Bitvise SSH Server 6.07
on the machine it is being run on.
... blah blah blah 

... и окно снова закрывается. У меня нет времени больше читать.
Я видел это странное поведение в Windows 7, но не в Windows XP (проверено на трех машинах).

Почему это происходит?
Как это можно решить / обойти?

ПРИМЕЧАНИЕ:
- При доступе к моей машине через удаленную консоль (протестировано с удаленной консолью SSH) все идет хорошо (я предполагаю, что telnet тоже заработает, но я не проверял):

d:\Installer\>BvSshServer-Inst.exe -? | more
This program will install Bitvise SSH Server 6.07
on the machine it is being run on.

Bitvise SSH Server is an SSH2 server for Windows 2000 or newer, including
the latest Windows 8.1 and 2012 R2. Please see www.bitvise.com/ssh-server
for more information.

This program must be run by a user with administrator privileges. If run
without command line options, installation will be performed in interactive
mode. If run with command line options without the '-interactive' option,
installation will be performed in unattended mode.

Usage:
 BvSshServer-Inst -installDir=directory OR -defaultSite OR -site=site-name
                  [-force OR -abortOnWarning[=warning-list-or-mask]
                  [-acceptEULA] [-interactive] [-noRollback]
                  [-activationCode=activation-code-hex]
                  [-keypairs=keypairs-file]
                  [-settings=settings-file]
                  [-siteTypeSettings=fileName]
                  [-startService]
                  [-startBssCtrl]

ПРИМЕЧАНИЕ2:
- Эти команды не решают проблему также:

start "BvSshServer-Inst.exe -? | more"
cmd /k "BvSshServer-Inst.exe -? | more"
BvSshServer-Inst.exe -? | more > Syntax.txt
BvSshServer-Inst.exe -? > Syntax.txt
BvSshServer-Inst.exe -? | more 2> Syntax.txt

1 ответ1

1

Почему это происходит?

Вы не предоставили других примеров, кроме Bitvise, но, похоже, это проблема с запросом UAC. Если программа не запускается с повышенными привилегиями, которые ей требуются, и, следовательно, требуется для отображения приглашения UAC, выходные данные записываются в другое (новое?) STDOUT. Таким образом, второе окно cmd И почему стандартное перенаправление текста в выходной файл (>) не работает. Этот вопрос StackOverflow, кажется, подтверждает это.

Что касается того, почему он работает на XP, у него нет UAC. Аналогично, вы можете получить то же поведение в командной строке в Windows 7 с помощью командной строки с повышенными привилегиями:

  • Выполнить -> cmd.exe -> Ctrl + Shift - Enter

  • Перейдите туда, где находится установщик Bitvise, и запустите его с параметром -help; выходной будет нормальным.

Как это можно решить / обойти?

Что касается решения для запуска таких программ из командной строки без перенаправления STDOUT с помощью приглашения UAC для этой программы, заключительные комментарии в приведенном выше вопросе дают подсказку, что вы можете использовать Elevation PowerToys для этого.

  • Загрузите файл отсюда (ссылка вверху страницы Elevation PowerToys). Это на самом деле архив, дважды щелкните, чтобы извлечь файлы, где вам нравится (я предлагаю папку!).

  • После того, как файлы извлечены, скопируйте elevate.cmd и elevate.vbs и разместите их где-нибудь полезным (в том же каталоге).

  • Создайте командный файл, убедившись, что учитываете соответствующие пути к elevate.cmd. Это по-прежнему будет отображать приглашение UAC, но не для Bitvise, и в этом вся разница.

    @echo off
    setlocal enabledelayedexpansion
    
    set CmdDir=%~dp0
    set CmdDir=%CmdDir:~0,-1%
    
    :: Check for Mandatory Label\High Mandatory Level
    whoami /groups | find "S-1-16-12288" > nul
    if "%errorlevel%"=="0" (
    echo Running as elevated user.  Continuing script.
    ) else (
    echo Not running as elevated user.
    echo Relaunching Elevated: "%~dpnx0" %*
    
    if exist "%CmdDir%\elevate.cmd" (
        set ELEVATE_COMMAND="%CmdDir%\elevate.cmd"
    ) else (
        set ELEVATE_COMMAND=elevate.cmd
    )
    
    set CARET=^^
    !ELEVATE_COMMAND! cmd /k cd /d "%~dp0" !CARET!^& call "%~dpnx0" %*
    goto :EOF
    )
    
    :: Continue script here
    BvSshClient-Inst.exe -help 
    BvSshClient-Inst.exe -help > txt.txt
    
    echo Arguments passed: %*
    

    Основные инструкции по установке некоторых из этих игрушек здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .