2009-07-09 12 views
4

J'ai un programme d'installation basé sur NSIS dont j'ai besoin pour générer des versions légèrement différentes de différentes conditions.Compilation de la condition du script NSIS basée sur l'existence d'un fichier

Les conditions sont faciles à établir au moment de la compilation, si un fichier particulier existe sur le disque, alors l'image de marque alternative peut être utilisée. Je sais que je pourrais utiliser une option de ligne de commande pour le makensis.exe pour fournir ce comportement, mais ce serait mieux si le compilateur pouvait prendre soin de cela pour moi.

Existe-t-il un moyen de créer une logique de type "IfExist" de compilation?

Répondre

6
!macro CompileTimeIfFileExist path define 
!tempfile tmpinc 
!system 'IF EXIST "${path}" echo !define ${define} > "${tmpinc}"' 
!include "${tmpinc}" 
!delfile "${tmpinc}" 
!undef tmpinc 
!macroend 

Section 
!insertmacro CompileTimeIfFileExist "$%windir%\explorer.exe" itsThere 
!ifdef itsThere 
MessageBox mb_Topmost yes 
!else 
MessageBox mb_Topmost no 
!endif 
SectionEnd 

Note: la commande du système utilisé ici suppose que vous compilez sur les fenêtres

+0

La limitation de l'utilisation de Windows est acceptable pour moi. Je prendrai ton code demain, avec Kyle. Merci. –

2

Je n'ai pas la réponse à votre question générique de détection de fichiers à la compilation, mais j'ai une solution à ce que vous essayez d'accomplir.

Mes installateurs utilisent quelque chose comme ceci:

Dans le fichier CustomBranding.nsh:

!define CUSTOM_BRANDING 
!define APPNAME "Brand X" 
!define LOGO "C:\Brand_X_Logo.png" 

Dans le script principal d'installation:

!include /NONFATAL "CustomBranding.nsh" 
!ifndef CUSTOM_BRANDING 
    !define APPNAME "Generic" 
    !define LOGO "C:\Generic_Logo.png" 
!endif 

Est-ce le genre de « marque de remplacement "vous demandez environ?

+0

Eh bien, l'image de marque dans mon cas est le produit plutôt que le programme d'installation, bien que je peux voir comment prendre votre mécanisme et utilise le. Je vais essayer votre solution et regarder la solution d'Ander quand je serai de retour au bureau demain. –