Com o passar do tempo, é (felizmente) mais comum encontrarinstaladores de linha de comandopara 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 umcomportamento estranhocom vários instaladores ao solicitar (via -?
, -help
... etc) sua sintaxe de uso: elesabra um novo console( cmd
) janelas,mostrar (rapidamente) sintaxee parâmetros...e feche novamentemuito rápido, então o usuárionão tem tempo para lerqualquer coisa.
Exemplo: o instalador Bitvise SSH (versão de testedisponível). Eu solicito sintaxe comoseus documentosdiz :
BvSshServer-Inst.exe -?
Anovo console cmdabre 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 janelafecha novamente. Não tenho mais tempo para ler.
Já 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/solução alternativa?
OBSERVAÇÃO:
- Ao acessar minha máquina via console remoto (testado com console remoto SSH), tudo corre bem (presumo que o telnet também funcionaria, mas 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]
NOTA 2:
- Esses comandos também não resolvem o problema:
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
Responder1
Por que isso está acontecendo?
Você não forneceu outros exemplos além do Bitvise, mas parece ser um problema de prompt do UAC. Se o programa não for executado com os privilégios elevados exigidos 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 do Stack Overflowparece confirmar isso.
Quanto ao motivo de funcionar no XP, ele não possui UAC. Da mesma forma, você pode obter o mesmo comportamento na linha de comando do Windows 7 com um prompt de comando elevado:
Correr->cmd.exe-> Ctrl+ Shift+Enter
Navegue até onde o instalador do Bitvise estiver localizado e execute-o com a
-help
opção; a saída será normal.
Como isso poderia ser resolvido/solução alternativa?
Quanto a uma solução para executar tais 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 oPowerToys de elevaçãopara conseguir isso.
Baixe o arquivo deaqui(link no topo da página Elevation PowerToys). Na verdade, este é um arquivo, clique duas vezes para extrair os arquivos onde desejar (sugiro uma pasta!).
Depois que os arquivos forem extraídos, copie elevate.cmd e elevate.vbs e coloque-os em algum lugar útil (no mesmo diretório).
Criar umaarquivo em lote, certificando-se de levar em consideração os caminhos apropriados para elevar.cmd. Isso ainda exibirá 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 a instalação de alguns desses brinquedos sãoaqui.