2009-12-18 3 views
17

InnoSetup을 사용하여 설치 프로그램을 만들고 [Code] 섹션에 사용자 정의 처리기를 작성하고 있습니다. 하나의 핸들러에서 [Setup] 섹션에 정의 된 AppName (또는 잠재적으로 다른 매개 변수의 값) 값을 검색 할 수 있기를 원합니다. 이 일을 할 수있는 방법이 있습니까? 나는 documentation을 보았지만, 이것을 할 수있는 것을 찾지 못했습니다. 우리의 InnoSetup 파일은 실제로 모든 프로그램과 프로그램마다 공통된 조각을 묶는 빌드 프로세스에 의해 생성되므로 각 프로그램의 코드에 상수를 정의해야하는 불편 함이 있습니다. 이 작업을 수행하는 편리한 방법이 있습니까?InnoSetup : [코드] 섹션의 AppName 얻기

내가 {AppName} 제외

MyString := ExpandConstant('{AppName}'); 

처럼 뭔가를 찾고 있어요 정의 된 일정하지 않습니다. [Setup] 섹션에 정의 된 매개 변수를 쿼리 할 수있는 방법이 있습니까?

답변

13

이것은 빌드 타임 상수이며 설치 시간 값이 아닙니다. 따라서 Inno Setup Preprocessor 추가 기능을 사용하여 이러한 상수를 정의 할 수 있습니다. (QuickStart pack을 통해 쉽게 설치할 수 있습니다.)

정의 상수 :

#define AppName "Excellent Foo App" 

[Setup]에 상수를 사용

AppName={#AppName} 

그리고 파스칼 코드에서, 나는 구문 완전히 모르겠지만, 뭔가 같은 :

MyString := {#AppName} 

업데이트 : 내 스크립트는 {#emit SetupSetting("AppId")}을 사용하기 쉽습니다. Brian's solution도이 방법을 발견했으며 더 좋습니다.

+0

흠. 모든 AppName을 매크로로 정의하지 않고 그 매크로를 사용하여 모든 프로그램에서 실제 AppName을 정의하는 것을 선호합니다. 그러나 이것은 시작입니다. –

+0

나는 당신이 무슨 뜻인지 안다. 그러나 나는 그것을 할 수있는 다른 방법을 알지 못합니다. –

19

크레이그 (Craig)의 답변에서 영감을 얻은 저는 Inno Setup Preprocessor 설명서 (ISTool에서 온라인에서 사용할 수없는 온라인 설명서)를보고 전 처리기의 SetupSetting 함수를 발견했습니다.

그것은 너무로 사용할 수 있습니다 :

MyString := '{#SetupSetting("AppName")}'; 

그리고만큼 [Setup] 섹션 (ISPP는 하나 개의 통과 것 같다)이 사용되는 장소 앞에 표시하고, AppName에 대한 정의를 포함하기 때문에, 이렇게하면 추출하려는 각 설정에 대해 별도의 매크로를 정의하지 않고도 원하는 결과를 얻을 수 있습니다.

+0

방금 ​​스크립트 중 하나를보고 있었는데 실제로이 스크립트를 사용했음을 발견했습니다. 실제로 {{#emit SetupSetting ("AppId")}'를 사용했지만 충분했습니다. 나는 내 대답을 업데이트하러 왔지만 당신이 나를 때렸다는 것을 알았다! –

+3

{#은 {#emit – mlaan

관련 문제