Receta de NSIS simple para la instalación básica.
Pregunta
Me estoy preparando para desarrollar mi primer instalador de Windows para un juego que estoy desarrollando. He escuchado recomendado NSIS, pero mis necesidades son básicas y no puedo averiguar qué es exactamente lo que se requiere.
Me gustaría un script NSIS corto que puede instalar un directorio de archivos en el directorio "Archivos de programa" (solicitando permiso si es necesario), cree un acceso directo simple en el menú Inicio y registre un desinstalador en el Agregar / Eliminar Programas Panel de control.
El desinstalador simplemente eliminaría el directorio y eliminaría el acceso directo, lo que solicitará reiniciar si los archivos están en uso.
Finalmente, me gustaría apoyar las actualizaciones al desinstalar todos los archivos antiguos e instalar nuevos, lo que solicita al usuario que se reinicie si los archivos antiguos están en uso.
He visto algunos scripts de NSH de muestra en línea que hacen bits y piezas de esto; Estoy tratando de encubrirlo a mí mismo y está pareciendo que va a ser cientos de líneas. Mi código huele a lo incorrecto.
¿Es el programa que estoy describiendo realmente se supone que es cientos de líneas de NSH? Seguramente hay una manera más fácil?
Solución
Descargar Eclipse y luego instalar eclipsensis plugin en Eclipse.Que no solo le brinda un editor completo para los archivos NSIS (con la finalización del código y todo lo similar), pero también tiene un
Otros consejos
Esto debería estar bastante cerca (no probé este script), debe completar los espacios en blanco y reemplazar ciertas cadenas ...
!define Name "Foo"
Name "${Name}"
Outfile "${Name} setup.exe"
RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on)
InstallDir "$ProgramFiles\${Name}"
!include LogicLib.nsh
!include MUI.nsh
Function .onInit
SetShellVarContext all
UserInfo::GetAccountType
pop $0
${If} $0 != "admin" ;Require admin rights on NT4+
MessageBox mb_iconstop "Administrator rights required!"
SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
Quit
${EndIf}
FunctionEnd
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Section
SetOutPath "$INSTDIR"
WriteUninstaller "$INSTDIR\Uninstall.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Foo By Bar Inc." "DisplayName" "${Name}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Foo By Bar Inc." "UninstallString" "$INSTDIR\Uninstall.exe"
;TODO: Install your files with the File command
CreateShortCut "$SMPROGRAMS\${Name}.lnk" "$INSTDIR\Foo.exe"
SectionEnd
Section "Uninstall"
;TODO: Delete your files
Delete "$SMPROGRAMS\${Name}.lnk"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Foo By Bar Inc."
Delete "$INSTDIR\Uninstall.exe"
RMDir "$INSTDIR"
SectionEnd
Un gran asistente para NSIS es la edición de HM NIS, que puede guiarlo a través de su primer instalador, incluido lo que menciona anteriormente, creo.
Si desea proporcionar un actualizador en NSIS, recomendaría algunas cosas:
- Cree una forma de que su solicitud verifique las actualizaciones de su servidor, generalmente se realiza cuando se carga primero
- Descargue el nuevo instalador y ejecutelo (a partir de su solicitud, aunque cualquiera pueda obtenerlo de su sitio web también).
- Si su programa antiguo se está ejecutando, debe apagarlo. NSIS tiene complementos que pueden encontrar un proceso y matarlo. Esto no es super "agradable", pero puede ser necesario.
Recomiendo este complemento de proceso
Si tiene DLL en uso, no puede eliminarlos. Sin embargo, en NSIS puede cambiarlos, y luego marcarlos para eliminarlos en el próximo reinicio, así:
Delete /REBOOTOK file.txt
Luego copia tus nuevos DLL en la carpeta.
Para NSIS, hay un montón de complementos, muestras y gran ayuda, pero aprender el idioma tarda un poco de tiempo. Inno es mucho más fácil de aprender, pero más difícil de personalizar cuando llegas a la nitty Gritty. Sin embargo, diría que los dos son comparables en general, y deberían trabajar bien.