2010-06-21 94 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