Nsis 从动态位置安装

Nsis 从动态位置安装,nsis,Nsis,我的项目有两个相同的exe文件版本。安装程序应该根据某些条件从两个版本中选择一个。 在正常情况下,我会执行File executable\myExe.exe。因为我现在有两个版本的文件,所以我必须执行类似于文件“${ExeSourcePath}\myExe.exe”,而$ExeSourcePath是通过检查各种条件确定的。编译此代码时,我得到 File: "${ExeSourcePath}\myExe.exe" -> no files found. 有人知道为什么吗?我只允许在File命

我的项目有两个相同的exe文件版本。安装程序应该根据某些条件从两个版本中选择一个。 在正常情况下,我会执行
File executable\myExe.exe
。因为我现在有两个版本的文件,所以我必须执行类似于
文件“${ExeSourcePath}\myExe.exe”
,而$ExeSourcePath是通过检查各种条件确定的。编译此代码时,我得到

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

有人知道为什么吗?我只允许在File命令中使用固定路径,还是我做错了什么?

${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

${ExeSourcePath}需要在编译时扩展到有效路径,您可以使用检查其值!在文件命令之前回显