2016-04-22 6 views
0

Ich versuche ein NSIS-Skript zu erstellen, das verschiedene Dateien an zwei verschiedene Stellen kopiert, die angegeben werden können. Ich habe die Dokumentation und andere StackOverflow-Einträge überprüft, finde aber keine Lösung. Mein Problem ist, dass ich eine zweite Variable für ein Verzeichnis definieren möchte. In diesem Verzeichnis sollen Beispieldateien und Projekte kopiert werden.! Define MUI_PAGE_DIRECTORY_VARIABLE erstellt keine Variable - NSIS

Beim Versuch, die NSI ich die folgenden Fehler/Warnungen zu kompilieren:

3 warnings: 
    unknown variable/constant "APPDIR" detected, ignoring (C:\Users\max\Desktop\PortablePlayer\so.nsi:29) 
    unknown variable/constant "APPDIR" detected, ignoring (C:\Users\max\Desktop\PortablePlayer\so.nsi:33) 
    unknown variable/constant "APPDIR\Testfile.txt" detected, ignoring (C:\Users\max\Desktop\PortablePlayer\so.nsi:43) 

Hier ist mein Skript, das ich verwende:

!include "MUI.nsh" 

Name "MyApp" 

OutFile "MyApp-Installer.exe" 
InstallDir "$PROGRAMFILES\My App" 

; Installation Directory for the App 
!insertmacro MUI_PAGE_DIRECTORY 

; Installation Directory for the samples and projects 
!define MUI_PAGE_HEADER_SUBTEXT "Choose your custom Samples Folder" 
!define MUI_DIRECTORYPAGE_TEXT_TOP "To separate your App and your samples and projects you can choose a different folder than the installation directory" 
!define MUI_PAGE_DIRECTORY_VARIABLE $APPDIR 
!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 
    File Testfile.txt 

    SetOutPath $APPDIR 
    File Testfile.txt 

    FileOpen $0 "$DESKTOP\Hello_world.txt" w 
    FileWrite $0 $APPDIR 
    FileClose $0 

    WriteUninstaller "$INSTDIR\MyApp-Uninstaller.exe" 
SectionEnd 

Section "Uninstall" 
    Delete "$INSTDIR\Testfile.txt" 
    Delete "$INSTDIR\MyApp-Uninstaller.exe" 
    RMDir $INSTDIR 
    Delete "$APPDIR\Testfile.txt" 
SectionEnd 

Zum Debuggen Ich habe versucht, den Wert zu schreiben von $ APPDIR in eine Textdatei, aber es schreibt nur $ APPDIR anstelle des Wertes. Wenn ich es zu $ ​​INSTDIR ändere, druckt es den korrekten Pfad für $ INSTDIR. Wie kann ich die Variable für $ APPDIR initialisieren? Wenn ich versuche, es oben zu initialisieren, ist es dort aber leer, so dass das Installationsprogramm nach erfolgreicher Kompilierung des Skripts fehlschlägt.

Lauf Win 7 mit NSIS 2.5.1

Kann jemand bitte etwas Licht auf, was falsch ist?

Danke!

+0

Ich hoffe, du meinst v2.51 und nicht v2.5.1 :) – Anders

Antwort

1

Die MUI_DIRECTORYPAGE_VARIABLE definieren sagt MUI, dass Sie eine benutzerdefinierte Variable, die Sie verwenden möchten, aber MUI erstellt nicht die Variable, haben Sie, dass sich in der Nähe der Spitze des Skripts zu tun:

Var APPDIR 

es also so etwas wie

Var APPDIR 
!include "MUI.nsh" 
!define MUI_DIRECTORYPAGE_VARIABLE $APPDIR 
!insertmacro MUI_PAGE_DIRECTORY 
!insertmacro MUI_PAGE_INSTFILES 
!insertmacro MUI_LANGUAGE "English" 

Section 
DetailPrint $APPDIR 
SectionEnd 

bearbeiten aussehen sollte: der Name des definieren MUI_DIRECTORYPAGE_VARIABLE ist nicht MUI_PAGE_DIRECTORY_VARIABLE wie Sie in Ihrem Beispiel haben ...

+0

Vielen Dank für die Antwort, wie ich erwähnte die Erschaffung der Variablen oben löst den Compiler-Fehler, aber hinterlässt eine leere und unbenutzte Variable, die nicht von MUI verwendet wird – Max

+1

Ah, Sie verwendete auch den falschen Namen für das Define, es ist MUI_DIRECTORYPAGE_VARIABLE (Kein Präfix _PAGE_) – Anders