2013-11-26 9 views
3

Inno 설치에서 AfterInstall 메서드로 프로 시저를 호출했지만 구문 오류가 발생합니다. 섹션 {code:GetShortName|{app}}은 그대로 쓰입니다. 내가 ExpandConstant를 사용하여 시도하지만, 나는 같은 오류가 + 연산자가 거기에 좋아 보이지 않는 것 같습니다. ExpandConstant에서 모든 것을 전달하려고 시도했지만 대신 런타임에 오류가 발생합니다.프로 시저 호출에서 상수 및 코드 사용

"내부 오류 : '스크립트 오류 : proc.'을 호출 할 수 없습니다." ".

Source: "InputFiles\prog.exe"; 
DestDir: "{tmp}/" ; 
AfterInstall: ExecuteCommand('{tmp}\prog.exe', '--distribute ' + ExpandConstant('{code:GetShortName|{app}}') + '/{#SandboxInternalFolder}') 

어떻게이 위치에서 코드 및 상수를 사용할 수 있습니까?

+1

거기에'+'연결 연산자가있어서 안좋아 보입니다. 예를 들어를 통과하여이 문제를 좁힐 수 있습니다. 'A'+ 'B''를 하나의 매개 변수로'AfterInstall' 함수에 적용합니다. 이 매개 변수에 대한 연결은 컴파일을 막을뿐입니다. 지나가는만큼의 매개 변수를 정의하거나 다른 선행 처리기 변수를 정의하는 것보다이 다른 방법을 극복하는 방법을 말하는 것이 어렵습니다. – TLama

+0

그렇게 할 수 없다면 연결을 수행하고 ExecuteCommand를 호출하는 매개 변수를 사용하지 않는 다른 사용자 지정 프로 시저를 만들 수 있습니다. 다시 말하면 ExecuteCommand를 호출 할 때마다 하나의 프로 시저가 필요합니다. – Amaranth

답변

2

AfterInstall 값 매개 변수의 구문 분석기는 매우 원시적입니다. 단일 값 또는 ExpandConstant 호출로 래핑 된 단일 문자열 값만 처리 할 수 ​​있습니다. 표현식이나 다른 함수 호출을 사용할 수 없습니다.

하지만 특정 구조를 작성하는 방식으로 인해 ExpandConstant 작동하는 방식에, 거기에 여전히 :

AfterInstall: ExecuteCommand(ExpandConstant('{tmp}\prog.exe'), ExpandConstant('--distribute {code:GetShortName|{app}}\{#SandboxInternalFolder}')) 

말한 데 매개 변수로 모든 것을에서 전달하는 정말 매력적인 이유가없는 한, 당신은해야한다, 그 간단한 프로 시저 이름을 지정하고 거기에서 원하는 모든 것을 직접 수행하십시오. 그런 식으로 코드 상수를 확장하지 않아도됩니다. 바로 GetShortName을 직접 호출 할 수도 있습니다.

+0

필자는 Execute 명령 함수를 호출하는 매개 변수없이 함수를 사용하여 종료했습니다. – Amaranth