Установить из динамического местоположения - PullRequest
1 голос
/ 21 июня 2010

У меня есть 2 версии одного и того же exe-файла для моего проекта. Предполагается, что установщик выберет одну из двух версий в зависимости от некоторых условий. В нормальном случае я бы сделал File executable\myExe.exe. Поскольку у меня теперь есть 2 версии файла, мне придется сделать что-то вроде File "${ExeSourcePath}\myExe.exe", а $ ExeSourcePath определяется путем проверки различных условий. При компиляции этого кода я получаю

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

Кто-нибудь знает почему? Мне разрешено использовать только фиксированные пути с командой File, или я делаю что-то не так?

1 Ответ

3 голосов
/ 21 июня 2010

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