2009-05-14 17 views
19

Jaki jest najprostszy sposób na zapisanie dziennika instalacji wyświetlanego w NSIS? Wydaje mi się, że pamiętam gdzieś, że możesz przekompilować kod NSIS specjalną flagą, aby umożliwić jej zapisanie dziennika. Czy istnieje prostszy sposób?Zapisywanie dziennika instalacji NSIS

+0

Spróbuj [Dump_log_to_file] (http://nsis.sourceforge.net/Dump_log_to_file). – Babak

Odpowiedz

14

Spróbuj wtyczki NSISLog.

Istnieje również LogEx.

+0

Lub użyj natywnego wsparcia logowania .... zobacz moją odpowiedź. –

4

Oto rozwiązanie prosto z 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

Nie działa w trybie cichym, nie zadziała, jeśli coś nie działa. Jaki jest powód tego rodzaju logowania? –

+1

To nie działa z 64-bitowym NSIS. Jakieś pomysły? – sproketboy

+0

Dostaję wyjątek lvm_getitemcount już zdefiniowany – JackNova

36

Próbując zachować małe rozmiary plików, domyślna instalacja kompilatora NSIS nie powoduje utworzenia plików dziennika. Pobierz Special Build z wydania i skopiuj go do folderu aplikacji makensis.exe (i Stub), aby załączyć go w celu uzyskania obsługi rejestrowania.

Gdy już to zrobisz, wystarczy dodać następujący skrypt: Potrzebne są

LogSet on 

żadne inne zmiany. Nie mam pojęcia, dlaczego nie jest to ustawienie domyślne, ponieważ w moich przypadkach dodaje tylko 48 bajtów do pliku!

+1

Upewnij się, że skopiowałeś zarówno makensis, jak i pliki w katalogu Stub. Właśnie skopiowałem plik makensis.exe i wszystko działa, ale plik install.log nigdy nie został utworzony. –

+1

'$ INSTDIR musi mieć wartość zanim zadzwonisz do tej funkcji lub nie zadziała." - od instrukcji NSIS –

+1

Kolejna pułapka: LogSet on musi być dodany do KAŻDEJ sekcji i/lub funkcji gdzie chcesz się logować (nie tylko pewnego razu) – werner