2009-05-14 17 views
19

¿Cuál es la forma más fácil de guardar el registro de instalación que se muestra en NSIS? Me parece recordar haber leído en alguna parte que puede recompilar el código NSIS con una bandera especial para permitirle guardar el registro. hay una manera mas facil?Guardar registro de instalación de NSIS

+0

Pruebe [Dump_log_to_file] (http://nsis.sourceforge.net/Dump_log_to_file). – Babak

Respuesta

14

Pruebe el plugin NSISLog.

También hay LogEx.

+0

O use el soporte de registro nativo .... vea mi respuesta. –

4

he aquí una solución directamente de la 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

No funciona en modo silencioso, no funcionará si algo falla. ¿Cuál es el motivo de este tipo de registro? –

+1

Esto no funciona con el NSIS de 64 bits. ¿Algunas ideas? – sproketboy

+0

Obtengo la excepción lvm_getitemcount ya definida – JackNova

36

En un intento de mantener los tamaños de archivo pequeños, la instalación predeterminada del compilador NSIS no crea archivos de registro. Descargue el Special Build de una versión y cópielo en la aplicación makensis.exe (y en la carpeta Stub) para aplicarle parches y tener soporte de registro.

Una vez que haya hecho eso, sólo tiene que añadir lo siguiente a su escritura: se necesitan

LogSet on 

ningún otro cambio. No tengo idea de por qué esto no es el predeterminado, como en mi caso, ¡solo agrega 48 bytes al tamaño del archivo!

+1

Asegúrese de copiar tanto el archivo makensis COMO los archivos en el directorio Stub. Acabo de copiar el makensis.exe y todo funciona, pero el archivo install.log nunca se creó. –

+1

'$ INSTDIR debe tener un valor antes de llamar a esta función o no funcionará. - del manual de NSIS –

+1

Otro inconveniente: LogSet on tiene que ser agregado a CADA sección y/o función donde quiera registrar cosas (no solo una vez) – werner

Cuestiones relacionadas