[英]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.