2014-11-23 6 views
0

inno-setup을 XE6으로 직접 컴파일했습니다. (필자는이 문서가 이전 델파이 버전을 제안했지만 새로운 IDE 만 가지고 있음을 알고 있습니다)inno-setup 예외를 디버그하는 방법

설정을 사용자 지정하기 위해 파스칼 스크립트를 사용하고 싶습니다. 하지만 가장 간단한 [Code] 섹션을 추가하여 설치 충돌을 일으켰습니다.

[Code] 
function InitializeSetup(): Boolean; 
begin 
end; 

생성 된 setup.exe를 설치하는 동안 실패

[22:10:29.945] *** Setup started 
[22:10:36.182] Setup version: Inno Setup version 5.5.4 (u) 
[22:10:36.186] Original Setup EXE: D:\Classics\Save\Installer\Win_Platform\Inno Setup\test\Output\setup.exe 
[22:10:36.190] Setup command line: /SL5="$911152,176640,176640,D:\Classics\Save\Installer\Win_Platform\Inno Setup\test\Output\setup.exe" /SPAWNWND=$7B05B8 /NOTIFYWND=$1150B10 /DEBUGWND=$74002E 
[22:10:36.200] Windows version: 6.2.9200 (NT platform: Yes) 
[22:10:36.203] 64-bit Windows: Yes 
[22:10:36.209] Processor architecture: x64 
[22:10:36.212] User privileges: Administrative 
[22:10:37.660] 64-bit install mode: No 
[22:10:37.674] Created temporary directory: C:\Users\CAOSHU~1\AppData\Local\Temp\is-5AOTJ.tmp 
[22:10:37.717] InitializeSetup raised an exception (fatal). 
[22:10:37.725] Exception message: 
[22:10:37.734] Message box (OK): 
    Access violation at address 006043C0 in module 'setup.tmp'. Read of address 00000014. 
[22:11:03.501] User chose OK. 
[22:11:03.515] Deinitializing Setup. 
[22:11:04.424] *** Setup exit code: 1 

아마도 방법 I 컴파일 INNO 설정은 몇 가지 문제가있다. XE6을 사용할 필요가 없습니다. 그러나 어떻게 디버그하여 문제가 어디인지 파악하십시오.

실행하면 충돌하는 코드가 아닙니다. inno setup으로 만든 setup.exe입니다.

답변

0

InitializeSetup()이 반환하는 값은 정의되지 않습니다.

function InitializeSetup(): Boolean; 
begin 
    result := true; 
end; 

이로 인해 정의되지 않은 동작이 발생합니다. 대부분의 경우 결과가 거짓 (RAX의 마지막 8 비트 == 0) 일 경우 항상 그렇지는 않으며 심각하게 "이해하기 힘든"문제가 발생합니다. 좋아.

+0

이 경우 결과는 정의되지 않지만 발생할 수있는 시나리오는 두 가지뿐입니다. 설치가 시작되거나되지 않습니다. 이 경우 예외는 발생하지 않습니다. 'RunBooleanFunction' 메소드에 의한'InitializeSetup' 이벤트의 셋업 ['triggers'] (https://github.com/jrsoftware/issrc/blob/is-5_5_5/Projects/Main.pas#L3143)은 ['tests' ] (https://github.com/jrsoftware/issrc/blob/is-5_5_5/Projects/ScriptRunner.pas#L358) 값 1에 대한 결과를 정의하지 않고 (선언하지만) 그에 따라 반환합니다. – TLama

+0

우리는 동의합니다;) OP가 회신하기를 기다립니다. 내 가정은 함수가 항상 false를 반환하기 때문에 설치 관리자가 충돌한다는 것입니다. UB에 대한 작은 텍스트는 단지 설명입니다. 사실 VM에서 코드가 바뀌었기 때문에 RAX에 관해서 말한 것은 잘못 될 수 있습니다. –

+0

@BBaz "result : = True"를 추가 한 후 동일한 오류가 발생합니다. setup.exe가 시작된 후 처음에는 "설치 언어 선택"페이지가 표시되고 "확인"을 클릭하면 예외 경고 창이 나타납니다 : "모듈 'setup.tmp'에서 주소가 '006043c0'인 액세스 위반. 주소 00000014 읽기. " – dltigles