2010-06-21 63 views
0

我有我的项目相同的exe文件的2个版本。根据一些条件,安装程序应该选择2个版本中的一个。 在正常情况下,我会做File executable\myExe.exe。因为我现在有2个版本的文件,所以我不得不做类似于File "${ExeSourcePath}\myExe.exe"的事情,$ ExeSourcePath是通过检查各种条件来确定的。当我编译此代码时,我得到从动态位置安装

File: "${ExeSourcePath}\myExe.exe" -> no files found. 

任何人都知道为什么?我只能使用File命令使用固定路径,或者我做错了什么?

+1

$ {} ExeSourcePath需要扩展到有效的p在编译时,你可以在file命令前用!echo检查它的值 – Anders 2010-06-21 16:17:24

回答

2

$ {ExeSourcePath}是预编译器定义,$ ExeSourcePath是在运行时使用的变量,File命令只能使用预编译器定义。

有两种方法可以处理这个问题:

A)包括文件和在基于由用户系统或者选择在运行时决定在安装过程中:

!include LogicLib.nsh 
Section 
ReadRegStr $0 HKLM "Software\foo\bar" baz 
${If} $0 > 5 
    File "c:\myproject\version2\app.exe" 
${Else} 
    File "c:\myproject\version1\app.exe" 
${EndIf} 
SectionEnd 

b)只包括一个文件基于传递给makensis(/ Dusev2 app.nsi)或东西上系统的命令行:

Section 
!define projectroot "c:\myproject" 
!searchparse /noerrors /file ....... usev2 ;Or you can use !system etc 
!ifdef usev2 
    File "${projectroot}\version2\app.exe" 
!else 
    File "${projectroot}\version1\app.exe" 
!endif 
SectionEnd