2009-05-14 17 views
19

एनएसआईएस में प्रदर्शित इंस्टॉलेशन लॉग को सहेजने का सबसे आसान तरीका क्या है? मुझे लगता है कि कहीं भी पढ़ना याद है कि आप एनएसआईएस कोड को एक विशेष ध्वज के साथ पुन: संकलित कर सकते हैं ताकि लॉग को सहेजने में सक्षम बनाया जा सके। क्या कोई आसान तरीका है?एनएसआईएस स्थापित करना लॉग इन

+0

[Dump_log_to_file] (http://nsis.sourceforge.net/Dump_log_to_file) आज़माएं। – Babak

उत्तर

14

से सीधे एक समाधान है NSISLog प्लगइन का प्रयास करें।

LogEx भी है।

+0

पर घोषित lvm_getitemcount को हटा दें या मूल लॉगिंग समर्थन का उपयोग करें .... मेरा उत्तर देखें। –

4

यहाँ NSIS website

StrCpy $0 "$EXEDIR\install.log" 
Push $0 
Call DumpLog 



!define LVM_GETITEMCOUNT 0x1004 
!define LVM_GETITEMTEXT 0x102D 

Function DumpLog 
    Exch $5 
    Push $0 
    Push $1 
    Push $2 
    Push $3 
    Push $4 
    Push $6 

    FindWindow $0 "#32770" "" $HWNDPARENT 
    GetDlgItem $0 $0 1016 
    StrCmp $0 0 exit 
    FileOpen $5 $5 "w" 
    StrCmp $5 "" exit 
    SendMessage $0 ${LVM_GETITEMCOUNT} 0 0 $6 
    System::Alloc ${NSIS_MAX_STRLEN} 
    Pop $3 
    StrCpy $2 0 
    System::Call "*(i, i, i, i, i, i, i, i, i) i \ 
     (0, 0, 0, 0, 0, r3, ${NSIS_MAX_STRLEN}) .r1" 
    loop: StrCmp $2 $6 done 
     System::Call "User32::SendMessageA(i, i, i, i) i \ 
     ($0, ${LVM_GETITEMTEXT}, $2, r1)" 
     System::Call "*$3(&t${NSIS_MAX_STRLEN} .r4)" 
     FileWrite $5 "$4$\r$\n" 
     IntOp $2 $2 + 1 
     Goto loop 
    done: 
     FileClose $5 
     System::Free $1 
     System::Free $3 
    exit: 
    Pop $6 
    Pop $4 
    Pop $3 
    Pop $2 
    Pop $1 
    Pop $0 
    Exch $5 
FunctionEnd 
+10

चुप मोड में काम नहीं करता है, अगर कुछ विफल हुआ तो काम नहीं करेगा। इस तरह के लॉगिंग का कारण क्या है? –

+1

यह 64 बिट एनएसआईएस के साथ काम नहीं करता है। कोई विचार? – sproketboy

+0

मुझे अपवाद मिलता है lvm_getitemcount पहले ही परिभाषित – JackNova

36

फ़ाइल आकार को छोटा रखने के प्रयास में, एनएसआईएस कंपाइलर की डिफ़ॉल्ट स्थापना लॉग फ़ाइलों को नहीं बनाती है। रिलीज के Special Build डाउनलोड करें और इसे makensis.exe एप्लिकेशन (और Stub फ़ोल्डर) पर लॉग इन करने के लिए इसे लॉन्च करने के लिए कॉपी करें।

एक बार जब आप यह है कि क्या किया है, बस अपनी स्क्रिप्ट के लिए निम्नलिखित जोड़ें:

LogSet on 

कोई अन्य बदलाव की जरूरत है। मुझे नहीं पता कि यह मेरे मामलों में डिफ़ॉल्ट क्यों नहीं है, यह केवल फाइलसाइज में 48 बाइट जोड़ता है!

+1

स्टब निर्देशिका में दोनों makensis और फ़ाइलों को कॉपी करना सुनिश्चित करें। मैंने बस makensis.exe की प्रतिलिपि बनाई और सबकुछ काम करता है, लेकिन install.log फ़ाइल कभी नहीं बनाई गई थी। –

+1

'INSTDIR के पास इस फ़ंक्शन को कॉल करने से पहले एक मान होना चाहिए या यह काम नहीं करेगा। - एनएसआईएस मैनुअल –

+1

से एक और गड़बड़: लॉगसेट पर प्रत्येक अनुभाग और/या फ़ंक्शन में जोड़ा जाना चाहिए जहां आप सामान लॉग करना चाहते हैं (न केवल एक बार) – werner

संबंधित मुद्दे