我的项目有两个版本的相同exe文件。安装程序应根据某些条件选择2个版本中的一个。
在正常情况下,我会做File executable\myExe.exe
。因为我现在有2个版本的文件,我必须做类似File "${ExeSourcePath}\myExe.exe"
的操作,并且$ ExeSourcePath是通过检查各种条件来确定的。编译此代码时,我得到了
File: "${ExeSourcePath}\myExe.exe" -> no files found.
任何人都知道为什么?我只允许使用File命令使用固定路径,或者我做错了什么?
答案 0 :(得分:3)
$ {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