2010-06-21 1 views
0

내 프로젝트에는 동일한 exe 파일의 두 버전이 있습니다. 설치 관리자는 일부 조건에 따라 2 가지 버전 중 하나를 선택해야합니다. 정상적인 경우 나는 File executable\myExe.exe을 할 것입니다. 이제 파일의 버전이 2 개이므로 File "${ExeSourcePath}\myExe.exe"과 같은 작업을 수행해야하며 $ ExeSourcePath는 다양한 조건을 확인하여 결정됩니다. 이 코드를 컴파일 할 때동적 위치에서 설치

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

누구나 아는 이유는 무엇입니까? 나는 단지 파일 명령으로 고정 경로를 사용할 수 있습니까? 아니면 내가 잘못하고있는 것입니까?

+1

$ {ExeSourcePath}는 유효한 페이지에 확장 할 필요가 ath 컴파일 타임에, 당신은 그 값을 파일 명령 앞에! echo로 확인할 수있다. – Anders

답변

2

$ {ExeSourcePath}는 프리 컴파일러 정의이고 $ ExeSourcePath는 런타임에 사용되는 변수이며, File 명령은 사전 컴파일러 정의 만 사용할 수 있습니다.

이 처리 할 수있는 두 가지 방법이 있습니다 : 설치 중)

을 두 파일을 포함하고 만든 사용자의 시스템이나 선택에 따라 런타임에 결정 :

!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