Archive: IfFileExists


IfFileExists
Hi,

I want to do something like

---------
IfFileExists "$INSTDIR\Manual\*.*"
{
CreateDirectory "$SMPROGRAMS\MySoft\${PRODUCT}\Help"

IfFileExists "$INSTDIR\Manual\Manual.html" "" +2
CreateShortCut "$SMPROGRAMS\MySoft\${PRODUCT}\Help\Manual (English).lnk" "$INSTDIR\Manual\Manual.html" "" "$INSTDIR\Manual\Manual.html" 0
}
---------

How can I do this "{ }" (begin-end) sort of thing with NSIS syntax? I've tried it with the labels with no success.

Also, I've seen that in makensis.nsi you add a "+2" as a parameter of IfFileExists. Why is that?


Try this code:


IfFileExists "$INSTDIR\Manual\*.*" 0 NotFileExisted
CreateDirectory "$SMPROGRAMS\MySoft\${PRODUCT}\Help"
IfFileExists "$INSTDIR\Manual\Manual.html" "" +2
CreateShortCut "$SMPROGRAMS\MySoft\${PRODUCT}\Help\Manual (English).lnk" \
"$INSTDIR\Manual\Manual.html" "" "$INSTDIR\Manual\Manual.html" 0
NotFileExisted:
+2 means that the installer should skip the next 2 lines.

Vytautas

Yes, I tried something similar but it didn't work. This is my current code:


Section $(TITLE_StartMenuShortCuts) StartMenuShortCuts
CreateDirectory "$SMPROGRAMS\MySoft\${PRODUCT}"

IfFileExists "$INSTDIR\Manual\*.*" 0 NotFileExisted
CreateDirectory "$SMPROGRAMS\MySoft\${PRODUCT}\Help"

IfFileExists "$INSTDIR\Manual\Manual.html" "" +2
CreateShortCut "$SMPROGRAMS\MySoft\${PRODUCT}\Help\Manual (English).lnk" "$INSTDIR\Manual\Manual.html" "" "$INSTDIR\Manual\Manual.html" 0
NotFileExisted:

CreateShortCut "$SMPROGRAMS\MySoft\${PRODUCT}\${PRODUCT}.lnk" "$INSTDIR\${PRODUCT_EXENAME}" "" "$INSTDIR\${PRODUCT_EXENAME}" 0
CreateShortCut "$SMPROGRAMS\MySoft\${PRODUCT}\Uninstall ${PRODUCT}.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
SectionEnd

What I want to do is, add a shortcut in the start menu to a manual (.html file) ONLY if the manual was installed. Manual installation is optional, it is in a section:


SubSection $(TITLE_Manual) Manual
Section $(TITLE_ManualEnglish) ""
SetOutPath $INSTDIR\Help
File "${FILESPATH}\Help\Manual.html"
SectionEnd
SubSectionEnd

If I can't use IfFileExists to check if the manual was installed, can I at least check if the section of the english manual was checked for installation? The problem is that I will have multiple translations of the manual so it will be something like:


SubSection $(TITLE_Manual) Manual
Section $(TITLE_ManualEnglish) ""
SetOutPath $INSTDIR\Help
File "${FILESPATH}\Help\Manual.html"
SectionEnd
Section $(TITLE_ManualLanguageX) ""
SetOutPath $INSTDIR\Help
File "${FILESPATH}\Help\ManualLANGX.html"
SectionEnd
...
SubSectionEnd


So I will need to check if at least one of the manual translations was checked to install.

You should use the LogicLib. See Examples\LogicLib.nsi and search for FileExists. It will be much easier.


Thanks for the tip. I finally decided to give up FileExists and use variables to know if the person decided to install X translation of the help file. Ej. something like


SubSection $(TITLE_Manual) Manual
var "ManualEnglish"
var "ManualLangX"

; I use this to initialize variables
Section "" ""
StrCpy $ManualEnglish "F"
StrCpy $ManualLangX "F"
SectionEnd

Section $(TITLE_ManualEnglish) ""
StrCpy $ManualEnglish "T"
SetOutPath $INSTDIR\Help
File "${FILESPATH}\Help\Manual.html"
SectionEnd

Section $(TITLE_ManualLangX) ""
StrCpy $ManualLangX "T"
SetOutPath $INSTDIR\Help
File "${FILESPATH}\Help\ManualLangX.html"
SectionEnd


and then, on the create shortcuts section:


${If} $ManualEnglish == "T"
CreateShortCut "$SMPROGRAMS\MySoft\${PRODUCT}\Help\Manual (English).lnk" "$INSTDIR\Manual\Manual.html" "" "$INSTDIR\Manual\Manual.html" 0
${EndIf}
${If} $ManualLangX == "T"
CreateShortCut "$SMPROGRAMS\MySoft\${PRODUCT}\Help\Manual (EspaƱol).lnk" "$INSTDIR\Manual\ManualLangX.html" "" "$INSTDIR\Manual\ManualLangX.html" 0
${EndIf}


My questions:

- Is there an easier way to use boolean variables without using StrCpy?
- Is there an easier way to check if a section was selected for installation?
- How can I do something like:

${If} $ManualEnglish == "T" ${or} $ManualLangX == "T"
CreateDirectory "$SMPROGRAMS\MySoft\${PRODUCT}\Help"

I need that because I need to create the main "Help" entry in the start menu only if at least one of the translations of the manual were selected to install.

Is there an easier way to use boolean variables without using StrCpy?
No.
Is there an easier way to check if a section was selected for installation?
Use LogicLib's ${SectionIsSelected}.
How can I do something like...
Maybe: if condition 1, add 1 to some var; if condition 2, add 1 to some var; if some var = 2, create directory. With StrCmp it's a lot easier:

StrCmp $0 T 0 skip
StrCmp $1 T 0 skip
CreateDirectory ...
skip: