0

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

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('Did not work', mbCriticalError, MB_OK);      
    end;
end; 

提前致谢

克里斯

4

1 回答 1

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/意味着单个语句是有条件的。“没有工作”消息位于.endErrorCode ifelseif (CurrentStep=ssPostInstall) then

像这样的东西怎么样(空气代码):

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;

整洁代码的重要性:p(以及为什么即使不需要,我也不会错过{/}begin/end块)

于 2015-03-18T17:32:49.560 回答