2014-11-23 138 views
0

我自己編譯了inno-setup和XE6。 (我知道,該文件建議較舊的德爾福版本,但我只有新的IDE)如何調試inno-setup例外

我想使用pascal腳本來自定義設置。但即使我添加了一個最簡單的[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 

也許我的方式編譯Inno Setup的存在一些問題。我不需要使用XE6?但如何調試並找出問題所在?

這不是一些代碼在運行時崩潰。它是由inno setup創建的setup.exe。

回答

0

InitializeSetup()返回的值未定義。

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

因爲這個,你會得到一個未定義的行爲。如果大多數情況下結果將是錯誤的(RAX == 0的最後8位),情況並非總是如此,您將會遇到嚴重的「難以理解」的問題,特別是在無緣無故的情況下,我會工作。

+0

那麼,在這種情況下結果是不確定的,但只有兩種情況可能發生。設置將開始或不開始。在這種情況下沒有例外。設置['triggers'](https://github.com/jrsoftware/issrc/blob/is-5_5_5/Projects/Main.pas#L3143)'InitializeSetup'事件由'RunBooleanFunction'方法['tests' ](https://github.com/jrsoftware/issrc/blob/is-5_5_5/Projects/ScriptRunner.pas#L358),未定義(但聲明)爲值1的結果並相應返回。 – TLama 2014-11-23 17:39:44

+0

我們同意;)我等待OP回覆:我的假設是它的安裝程序崩潰,因爲函數總是返回false,這可能是錯誤的......關於UB的小文本僅僅是解釋性的。實際上,由於代碼在虛擬機中運行,我對RAX所說的內容可能是錯誤的。 – 2014-11-23 17:46:40

+0

@Bazaz添加「result:= True」後出現相同的錯誤。 setup.exe啓動後,首先顯示「選擇安裝語言」頁面,然後點擊「確定」後,異常警告窗口顯示:「地址006043c0在模塊'setup.tmp'中的訪問衝突。讀取地址00000014。 「 – dltigles 2014-11-23 23:10:23