2010-06-23 18 views
6

Ben NSIS kullanılarak pencereler için montajcılar yapıyorum yüklemek ve özel bir takım kullanıcı komut satırı kullanarak belirtebilirsiniz seçenekleri takmak zorunda komut satırına sırasında istemi:NSIS - Baskı, örneğin

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

neler Yapmak istediğim, bu seçenekleri kurulum yapan kişiye göstermektir. Kolayca// ayrıştırabilir miyim? $ {GetParameters} ve $ {GetOptions} parametreleriyle veya/help parametrelerini kullanın, ancak asıl yazdırmayı komut istemine nasıl yapabilirim?

cevap

9

NSIS bir GUI programıdır ve gerçekten stdout'a yazma yeteneğine sahip değildir.

XP'de

ve daha sonra sistem eklentisi ile yapabilirsiniz:

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

< XP'de hiçbir AttachConsole yoktur ve siz (muhtemelen yeni bir konsol penceresi açılır) bu sistemler üzerinde AllocConsole çağırmanız gerekir

Düzenleme: ana süreç

!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" 
ile zaten bir tane yoksa
yeni konsolu açabilir

Ancak, gerçekten/gibi bir anlam ifade etmiyor mu? elleçleme orada sadece .oninit bu kodu yapıştırarak görünür olacak hiçbir konsol

!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} 
+0

bir XP makinede görünür herhangi bir şey yapmaz siz de bir mesaj kutusu açabileceğini, gider. I ve r0 değerleri gibi bir şey ayarlamam gerekiyor mu? Ayrıca bu çizgilerin her birinin ne yaptığını anlamıyorum. İlk satırın mevcut konsolun tanıtıcısını aldığını, ikinci satırın bu konsola 0 $ 'ı bağladığını ve böylece bu sanal dosyaya sonraki yazmaların konsolda sona ereceğini varsayardım. Bu doğru mu? Ayrıca, nsis kernel32 :: attachconsole için googling yaparken winamp forumlarında bulunan daha uzun kod örneklerini denedim, ancak aynı soruna sahipler. – MatsT

+1

Rastgele sayfalara daha da fazla ilgi gösterdikten sonra, tüm 'i' ifadesinin basitçe aşağıdakilerin tamsayı olduğunu gösterdiğimi düşünüyorum. Pencereler hakkındaki bilgimi anlayabileceğiniz gibi api çok temel. – MatsT

+0

Programı açık bir konsoldan (cmd.exe) çalıştırmanız gerekiyor – Anders