我想为我的安装程序设置退出代码,这样我就可以知道为什么安装被中止了。我正在使用Inno Setup。
从Inno Setup帮助文档(来自文章“安装程序退出代码”)中:
从Inno Setup 3.0.3开始,安装程序可能返回以下其中之一的退出代码:
0 安装成功完成。
1 安装未能初始化。
2 用户在实际安装开始之前单击向导中的“取消”,或在开启“这将安装…”消息框时选择“否”。
3 在准备转移到下一个安装阶段时(例如,从显示预安装向导页面到实际安装过程),发生致命错误。除非出现最不寻常的情况(例如内存或Windows资源耗尽),否则不应该发生这种情况。
4 在实际安装过程中发生致命错误。
注意:导致显示“中止-重试-忽略”框的错误不是致命错误。如果用户在这样的消息框中选择“中止”,则会返回退出代码
5
。5 用户在实际安装过程中单击“取消”,或在“中止-重试-忽略”框中选择“中止”。
6 调试器(在IDE中使用“运行|终止”)强制终止了安装程序进程。
您可以通过确认退出代码为0
来轻松检查安装是否成功完成。此外:
任何非零的退出代码都表示安装程序未能成功完成。
更具体地回答你的问题,你可以通过观察退出代码2
或5
来确定安装是否被取消。
如果你希望在Inno本应返回0
时返回自定义的退出代码,你可以定义以下事件函数:
function GetCustomSetupExitCode: Integer;
从帮助文档中(来自文章"Pascal脚本编程:事件函数"):
function GetCustomSetupExitCode: Integer;
返回一个非零数字以指示安装程序返回自定义退出代码。只有在安装成功完成且退出代码为
0
时才会调用此函数。
使用:
[Code]
procedure ExitProcess(exitCode:integer);
external 'ExitProcess@kernel32.dll stdcall';
procedure SomeEventHere();
begin
if someerror then begin
ExitProcess(9); //Your custom exit code
end;
end;
[Code]
var CustomExitCode: integer;
procedure ExitProcess(exitCode:integer);
external 'ExitProcess@kernel32.dll stdcall';
procedure DeinitializeSetup();
begin
if (CustomExitCode <> 0) then
begin
DelTree(ExpandConstant('{tmp}'), True, True, True);
ExitProcess(CustomExitCode);
end;
end;
function InitializeSetup: Boolean;
begin
// Some check did fail, exiting with custom code
CustomExitCode = -1;
// Let's just close the setup
Result := false;
end;
0
退出时,你才能定义自定义的退出代码! - Paul Lammertsma$?
中。 - Paul Lammertsma