簡體   English   中英

NSIS - 在命令行安裝期間打印以提示

[英]NSIS - printing to prompt during command line install

我正在使用NSIS為Windows創建安裝程序,並且有許多用戶可以使用命令行指定的自定義安裝選項,例如:

installer.exe /IDPATH=c:\Program Files\Adobe\Adobe InDesign CS5 /S

我想要做的是向安裝人員顯示這些選項。 我可以輕松解析/? 或者使用$ {GetParameters}和$ {GetOptions}幫助參數,但是如何在命令提示符下進行實際打印?

NSIS是一個GUI程序,並沒有真正能夠寫入stdout。

在XP及更高版本中,您可以使用系統插件執行此操作:

System::Call 'kernel32::GetStdHandle(i -11)i.r0' 
System::Call 'kernel32::AttachConsole(i -1)' 
FileWrite $0 "hello" 

在<XP,沒有AttachConsole,你需要在這些系統上調用AllocConsole(可能會打開一個新的控制台窗口)

編輯:如果父進程沒有已有的控制台,您可以打開一個新的控制台

!include LogicLib.nsh
System::Call 'kernel32::GetStdHandle(i -11)i.r0' 
System::Call 'kernel32::AttachConsole(i -1)i.r1' 
${If} $0 = 0
${OrIf} $1 = 0
 System::Call 'kernel32::AllocConsole()'
 System::Call 'kernel32::GetStdHandle(i -11)i.r0' 
${EndIf}
FileWrite $0 "hello$\n" 

但就它而言,它真的沒有任何意義嗎? 處理過,你可以在沒有控制台時打開一個消息框

!include LogicLib.nsh
StrCpy $9 "USAGE: Hello world!!" ;the message
System::Call 'kernel32::GetStdHandle(i -11)i.r0' ;try to get stdout
System::Call 'kernel32::AttachConsole(i -1)i.r1' ;attach to parent console
${If} $0 <> 0
${AndIf} $1 <> 0
 FileWrite $0 "$9$\n" 
${Else}
 MessageBox mb_iconinformation $9
${EndIf}
!include LogicLib.nsh
StrCpy $9 "USAGE: Hello world!!" ;the message
System::Call 'kernel32::AttachConsole(i -1)i.r0' ;attach to parent console
${If} $0 != 0
 System::Call 'kernel32::GetStdHandle(i -11)i.r0' ;console attached -- get stdout
 FileWrite $0 "$9$\n" 
${Else}
 ;no console to attach -- show gui message
 MessageBox mb_iconinformation $9
${EndIf}

首先連接控制台然后獲取std句柄。 在附加句柄之前(通常會)無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM