从动态位置安装

时间:2010-06-21 11:14:48

标签: nsis

我的项目有两个版本的相同exe文件。安装程序应根据某些条件选择2个版本中的一个。 在正常情况下,我会做File executable\myExe.exe。因为我现在有2个版本的文件,我必须做类似File "${ExeSourcePath}\myExe.exe"的操作,并且$ ExeSourcePath是通过检查各种条件来确定的。编译此代码时,我得到了

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

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

1 个答案:

答案 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