Innosetup:sspostinstall执行了不止一次?

时间:2015-03-18 14:34:01

标签: inno-setup post-install

我尝试在CurStepChanged的{​​{1}}过程中执行.exe,.exe是(CurrentStep = ssPostInstall)部分的一部分。在我看来好像多次执行[Files] - 有时甚至在处理安装过程的文件之前。当然,我可以将.exe提取到一个临时文件夹,但我想了解它的行为令人失望。到达ssPostInstall步骤的那一刻似乎每次执行时都会有所不同,有时会达到不止一次。我错过了什么吗?这是我的代码的一部分:

ssPostinstall

提前致谢

克里斯

1 个答案:

答案 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,即使不需要)