Domanda

Sto preparando a sviluppare il mio primo installer di Windows per un gioco che sto sviluppando. Ho sentito NSIS raccomandato, ma le mie esigenze sono semplici e non riesco a capire cosa è esattamente richiesto.

Vorrei uno script di nsis corto in grado di installare una directory di file nella directory "Programmi file" (richiedere il permesso se necessario), creare un semplice collegamento nel menu Start e registrare un disinstallazione in aggiunta / rimuovi Pannello di controllo dei programmi.

Il disinstaller cancellerebbe semplicemente la directory e rimuovere il collegamento, prompt per il riavvio se i file sono in uso.

Infine, mi piacerebbe supportare gli aggiornamenti disinstallando tutti i vecchi file e installando nuovi, chiedendo all'utente di riavviare se i vecchi file sono in uso.

Ho visto alcuni campioni di script NSH online che fanno bit e pezzi di questo; Sto cercando di imbrogliarlo insieme e sembra che sia a lungo di linee di linee. Il mio codice odora come la cosa sbagliata.

Il programma che sto descrivendo davvero dovrebbe essere centinaia di linee di NSH? Sicuramente c'è un modo più semplice?

È stato utile?

Soluzione

Scarica eclipse e successivamente installare il plugin eclipsensis in eclipse.Che non solo ti dà un editor completo di file di NSIS (con il completamento del codice e tutto il tipo), ma ha anche una procedura guidata per creare lo script per te rispondendo solo ad alcune domande (titolo dell'applicazione, iconaDa utilizzare, ...).

Altri suggerimenti

Questo dovrebbe essere abbastanza vicino (non ho testato questo script) dovresti riempire gli spazi vuoti e sostituire alcune stringhe ...

!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 Great Wizard per NSIS è l'HM NIS Edit, che può guidarti tramite il tuo primo installatore, incluso ciò che hai detto sopra credo.

http://hmne.sourceforge.net/

Se vuoi fornire un aggiornamento in NSIS, consiglierei alcune cose:

    .
  1. Crea un modo per la tua applicazione per verificare gli aggiornamenti dal server, solitamente fatto quando si carica prima
  2. Scarica il nuovo installatore ed eseguilo (dalla tua applicazione, anche se qualcuno probabilmente può ottenerlo anche dal tuo sito web).
  3. Se il tuo vecchio programma è in esecuzione, è necessario spegnerlo. NSIS ha plug-in che possono trovare un processo e ucciderlo. Questo non è super 'bello' ma può essere necessario.
  4. Consiglio questo plug-in processo

    Se hai DLL in uso, non puoi semplicemente eliminarli. Tuttavia, in NSIS è possibile rinominarli, quindi contrassegnarli per la cancellazione sul successivo riavvio, come:

    Delete /REBOOTOK file.txt
    
    .

    Quindi copia la tua nuova DLL nella cartella.

    Per NSIS, ci sono un sacco di plugin, campioni e grande aiuto, ma imparare la lingua richiede un po 'di tempo. Inno è molto più facile da imparare, ma più difficile da personalizzare quando arrivi a Nitty Gritty. Tuttavia, direi che i due sono complessivi comparabili, e dovrei lavorare bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top