Delphi 如何调试inno安装程序异常
我自己用XE6编译了inno安装程序。(我知道,文档建议使用旧的delphi版本,但我只有新的IDE) 我想使用pascal脚本自定义设置。但即使我添加了一个最简单的[代码]部分,即创建的安装崩溃Delphi 如何调试inno安装程序异常,delphi,exception,inno-setup,pascalscript,Delphi,Exception,Inno Setup,Pascalscript,我自己用XE6编译了inno安装程序。(我知道,文档建议使用旧的delphi版本,但我只有新的IDE) 我想使用pascal脚本自定义设置。但即使我添加了一个最简单的[代码]部分,即创建的安装崩溃 [Code] function InitializeSetup(): Boolean; begin end; 安装时,创建的setup.exe失败: [22:10:29.945] *** Setup started [22:10:36.182] Setup version: Inno Se
[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安装程序的方式有一些问题。我不需要使用XE6?但是如何调试并找出问题所在呢
这不是一些代码在运行时崩溃。它是由inno setup创建的setup.exe 初始化设置()返回的值未定义
function InitializeSetup(): Boolean;
begin
result := true;
end;
因此,您会得到一个未定义的行为。如果大多数情况下结果都是假的(RAX==0的最后8位),情况并非总是如此,您会遇到严重的“难以理解”问题,特别是在没有任何原因的情况下,它会起作用。好吧,在这种情况下,结果是未定义的,但可能只会发生两种情况。安装程序将启动或不启动。在这种情况下没有提出任何例外。设置程序通过
RunBooleanFunction
方法设置InitializeSetup
事件,该方法将未定义(但已声明)的结果转换为值1并相应返回。我们同意;)我等待OP回复:我的假设是它的安装程序崩溃,因为函数总是返回false,这可能是错误的……关于UB的小文本只是解释性的。实际上,由于代码在VM中转换,我所说的关于RAX的事情可能是错误的。@BBaz在添加“result:=True”后出现了相同的错误。setup.exe启动后,首先显示“选择安装语言”页面,然后单击“确定”后,异常警告窗口显示:“模块'setup.tmp'中地址006043c0处的访问冲突。读取地址00000014。”顺便说一句,我没有用IDE编译代码。我刚刚用build.bat编译了它。@TLama:BTW,谢谢你的帮助。我的inno安装环境现在正常。谢谢