我尝试在CurStepChanged
的{{1}}过程中执行.exe,.exe是(CurrentStep = ssPostInstall)
部分的一部分。在我看来好像多次执行[Files]
- 有时甚至在处理安装过程的文件之前。当然,我可以将.exe提取到一个临时文件夹,但我想了解它的行为令人失望。到达ssPostInstall
步骤的那一刻似乎每次执行时都会有所不同,有时会达到不止一次。我错过了什么吗?这是我的代码的一部分:
ssPostinstall
提前致谢
克里斯
答案 0 :(得分:2)
代码中的嵌套和缩进使得问题不明显,但是如果代码正确缩进,则消息的嵌套错误会更加明显。
procedure CurStepChanged(CurrentStep: TSetupStep);
var ErrorCode : Integer;
begin
if (CurrentStep = ssPostInstall) then
begin
if Exec(ExpandConstant('{app}\{code:getVersionSubdir}\licencing\haspdinst.exe'), '-i', '',SW_SHOW, ewWaitUntilTerminated, ErrorCode) then
begin
if ErrorCode = 0 then
else
MsgBox(SysErrorMessage(ErrorCode), mbCriticalError, MB_OK);
end;
end
else
begin
MsgBox('Too early? Did not work', mbCriticalError, MB_OK);
end;
end;
请注意begin
end
块中缺少ErrorCode
/ if
,表示单个语句是有条件的。 "没有用"邮件位于else
的{{1}}块中。
这样的事情(航空代码):
if (CurrentStep=ssPostInstall) then
整洁代码的重要性:p
(以及为什么我永远不会错过procedure CurStepChanged(CurrentStep: TSetupStep);
var ErrorCode : Integer;
begin
if (CurrentStep = ssPostInstall) then
begin
if not Exec(ExpandConstant('{app}\{code:getVersionSubdir}\licencing\haspdinst.exe'), '-i', '',SW_SHOW, ewWaitUntilTerminated, ErrorCode) then
begin
// Exec returned failure
MsgBox('Did not work', mbCriticalError, MB_OK);
end;
else if ErrorCode <> 0 then
begin
// Exec returned success but non 0 error code
MsgBox(SysErrorMessage(ErrorCode), mbCriticalError, MB_OK);
end;
// Else here if you want to do something on success
end;
end;
/ {
和}
/ begin
,即使不需要)