NSIS là một chương trình GUI và không thực sự có khả năng viết thành stdout.
Trên XP và sau đó bạn có thể làm điều này với các plugin hệ thống:
System::Call 'kernel32::GetStdHandle(i -11)i.r0'
System::Call 'kernel32::AttachConsole(i -1)'
FileWrite $0 "hello"
On < XP, không có AttachConsole và bạn cần phải gọi AllocConsole trên những hệ thống (có thể là sẽ mở một cửa sổ giao diện điều khiển mới)
Edit: Bạn có thể mở một giao diện điều khiển mới nếu quá trình cha mẹ không có một cái nào với
!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"
Nhưng nó không thực sự làm cho bất kỳ ý nghĩa như xa như /? xử lý đi, bạn cũng có thể mở hộp thư khi không có bảng điều khiể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}
Có vẻ như việc dán mã này vào .oninit không hiển thị trên máy XP. Tôi có cần thiết lập bất kỳ thứ gì như các giá trị của i và r0 không? Tôi cũng không hoàn toàn hiểu những gì từng dòng này làm. Tôi sẽ cho rằng dòng đầu tiên được xử lý của giao diện điều khiển hiện tại, dòng thứ hai liên kết $ 0 đến bàn điều khiển đó để ghi tiếp theo vào tệp ảo đó sẽ kết thúc trong bảng điều khiển. Nó thật sự đúng? Tôi cũng đã thử các mẫu mã dài hơn được tìm thấy trên các diễn đàn winamp khi googling cho nsis kernel32 :: attachconsole, nhưng chúng dường như có cùng một vấn đề. – MatsT
Sau khi nhiều googling hơn để các trang ngẫu nhiên tôi nghĩ rằng tôi đã tìm ra rằng tất cả các 'tôi' chỉ đơn giản là biểu thị rằng sau đây là một số nguyên. Như bạn có thể nói kiến thức của tôi về các cửa sổ api là rất cơ bản. – MatsT
Bạn cần chạy chương trình từ bên trong bảng điều khiển mở (cmd.exe) – Anders