Con el paso del tiempo es (afortunadamente) más habitual encontrarinstaladores de línea de comandospara la mayoría de los programas GUI de Windows, por lo que puede realizar instalaciones de consola por lotes y sin conexión.
Pero a veces he encontrado uncomportamiento extrañocon varios instaladores al solicitar (a través de -?
, -help
... etc) su sintaxis de uso:abrir una nueva consola( cmd
) ventanas,mostrar (rápidamente) la sintaxisy parámetros...y cerrar de nuevodemasiado rápido, por lo que el usuariono tiene tiempo para leercualquier cosa.
Ejemplo: el instalador Bitvise SSH (versión de pruebadisponible). solicito sintaxis comosus documentosdice :
BvSshServer-Inst.exe -?
Anueva consola cmdse abre diciendo cosas como:
This program will install Bitvise SSH Server 6.07
on the machine it is being run on.
... blah blah blah
... y la ventanase cierra de nuevo. Ya no tengo tiempo para leer.
He visto este comportamiento extraño en Windows 7, pero no en Windows XP (probado en tres máquinas).
¿Por qué está pasando esto?
¿Cómo podría solucionarse o solucionarse?
NOTA:
- Cuando accedo a mi máquina a través de la consola remota (probado con la consola remota SSH), todo va bien (supongo que telnet también lo haría funcionar, pero no lo he probado):
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:
- Estos comandos tampoco resuelven el 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
Respuesta1
¿Por qué está pasando esto?
No proporcionó otros ejemplos además de Bitvise, pero parece ser un problema de aviso de UAC. Si el programa no se ejecuta con los privilegios elevados que requiere y, por lo tanto, debe mostrar un mensaje UAC, la salida se escribe en una STDOUT diferente (¿nueva?). Por lo tanto, la segunda ventana de cmd Y por qué la redirección de texto estándar a un archivo de salida (>) no parece funcionar.Esta pregunta de desbordamiento de pilaparece confirmarlo.
En cuanto a por qué funciona en XP, no tiene UAC. Del mismo modo, puedes obtener el mismo comportamiento en la línea de comando en Windows 7 con un símbolo del sistema elevado:
Correr->cmd.exe-> Ctrl+ Shift+Enter
Navegue hasta donde esté ubicado el instalador de Bitvise y ejecútelo con la
-help
opción; la salida será normal.
¿Cómo podría solucionarse o solucionarse?
En cuanto a una solución para ejecutar dichos programas desde la línea de comandos sin la redirección STDOUT mediante el indicador UAC para ese programa, los comentarios finales en la pregunta anterior brindan una pista de que puede usar elElevación PowerToyspara lograr esto.
Descargue el archivo deaquí(vinculado en la parte superior de la página de Elevation PowerToys). En realidad, esto es un archivo, haga doble clic para extraer los archivos donde desee (¡le sugiero una carpeta!).
Una vez extraídos los archivos, copie elevate.cmd y elevate.vbs y colóquelos en algún lugar útil (en el mismo directorio).
Crear unarchivo por lotes, asegurándose de tener en cuenta las rutas adecuadas para elevar.cmd. Esto seguirá mostrando un mensaje de UAC, pero no para Bitvise, y esto marca la diferencia.
@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: %*
Las instrucciones básicas para instalar algunos de estos juguetes sonaquí.