Instaladores de linha de comando do Windows usados por alguns programas: problemas mostrando a sintaxe e os parâmetros

0

Conforme o tempo passa, é (felizmente) mais comum encontrar instaladores de linha de comando para a maioria dos programas GUI do Windows, para que você possa fazer instalações de console em lote e offline.

Mas às vezes eu encontrei um comportamento estranho com vários instaladores ao solicitar (via -? , -help ... etc) sua sintaxe de uso: eles abrem um novo console ( cmd ) windows, mostra (rapidamente) sintaxe e parâmetros ... e fecha novamente para rápido, então o usuário não tem tempo para ler qualquer coisa.

Exemplo: O instalador do SSH Bitvise ( versão de teste disponível). Eu solicito a sintaxe como seus documentos diz:

BvSshServer-Inst.exe -?

Um novo console cmd é aberto dizendo coisas como:

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

... e a janela fecha novamente . Não tenho mais tempo para ler.
Eu vi esse comportamento estranho no Windows 7, mas não no Windows XP (testado em três máquinas).

Por que isso está acontecendo?
Como isso poderia ser resolvido / resolvido?

NOTA :
- Ao acessar a minha máquina via console remoto (testado com o console remoto SSH), tudo corre bem (presumo que o telnet também funcionaria, mas eu não testei):

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]

NOTE2 :
- Esses comandos não resolvem o problema nem:

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
    
por Sopalajo de Arrierez 20.07.2014 / 23:28

1 resposta

1

Why is this happening?

Você não forneceu outros exemplos além do Bitvise, mas parece ser um problema do UAC. Se o programa não for executado com os privilégios elevados necessários e, portanto, for necessário para exibir um prompt do UAC, a saída será gravada em um STDOUT diferente (novo?). Assim, a segunda janela do cmd E por que o redirecionamento de texto padrão para um arquivo de saída (>) parece não funcionar. Esta pergunta StackOverflow parece confirmar isso.

Por que ele funciona no XP, ele não tem o UAC. Da mesma forma, você pode obter o mesmo comportamento na linha de comando do Windows 7 com um prompt de comando elevado:

  • Executar - > cmd.exe - > Ctrl + Shift - Digite

  • Navegue até onde o instalador do Bitvise estiver localizado e execute-o com a opção -help; a saída será normal.

How could it be solved/workarounded?

Quanto a uma solução para executar esses programas a partir da linha de comando sem o redirecionamento STDOUT pelo prompt do UAC para esse programa, os comentários finais na pergunta acima fornecem uma pista de que você pode usar o PowerToys de elevação para conseguir isso.

  • Faça o download do arquivo de aqui (link no topo da página do PowerToys da Elevação). Este é realmente um arquivo, clique duas vezes para extrair os arquivos de onde você gosta (sugiro uma pasta!).

  • Quando os arquivos forem extraídos, copie os arquivos elevate.cmd e elevate.vbs e coloque-os em algum lugar útil (no mesmo diretório).

  • Crie um arquivo em lote , certificando-se de levar em consideração os caminhos apropriados para elevate.cmd. Isso ainda mostrará um prompt do UAC, mas não para o Bitvise, e isso faz toda a diferença.

    @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: %*
    

    As instruções básicas sobre como instalar alguns desses brinquedos são aqui .

por 21.07.2014 / 02:40