某些程式使用的 Windows 命令列安裝程式:顯示語法和參數的問題

某些程式使用的 Windows 命令列安裝程式:顯示語法和參數的問題

隨著時間的推移,(幸運的是)更常見的是發現命令列安裝程式適用於大多數 Windows GUI 程序,因此您可以進行批次和離線控制台安裝。

但有時我發現奇怪的行為與多個安裝程式一起請求(通過-?-help...等)它們的使用語法:they開啟一個新控制台( cmd) 窗戶,(快速)顯示語法和參數...並再次關閉速度快,所以用戶沒有時間讀書任何事物。

範例:Bitvise SSH 安裝程式 (試用版可用的)。我請求語法為它的文檔說:

BvSshServer-Inst.exe -?

A新的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

為什麼會發生這種情況?

除了Bitvise之外,您沒有提供其他範例,但這似乎是UAC提示問題。如果程式未以其所需的提升權限運行,因此需要顯示 UAC 提示符,則輸出將寫入不同的(新的?)STDOUT。因此,第二個 cmd 視窗以及為什麼標準文字重定向到輸出檔案 (>) 似乎不起作用。這個堆疊溢位問題似乎證實了這一點。

至於為什麼它可以在XP上運行,它沒有UAC。同樣,您可以使用提升的命令提示字元在 Windows 7 的命令列上獲得相同的行為:

  • 跑步->執行程式-> Ctrl+ Shift+Enter

  • 導航到 Bitvise 安裝程式所在的位置並使用-help選項運行它;輸出就會正常。

如何解決/解決這個問題?

至於從命令列執行此類程式而不透過該程式的 UAC 提示進行 STDOUT 重定向的解決方案,上述問題中的最終註解提供了一個線索,您可以使用高程動力玩具來實現這一點。

  • 從以下位置下載文件這裡(連結在 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: %*
    

安裝其中一些玩具的基本說明是這裡

相關內容