2

我们将一些其他第三方软件与我们的安装程序一起打包,并在安装我们的产品期间安装它们。我们以静默模式安装它们并捕获它们的退出代码,因此有时它们会成功安装并将退出代码设置为“3010”,这需要重新启动。因此,在这些情况下,我们希望在最后显示重新启动页面,但希望提供自定义消息。

在完成页面上显示自定义消息的最佳方式是什么?

[Messages]
#if FileExists("c:\RebootFile.txt")==0 
  FinishedRestartLabel=To complete the installation of ConditionalMessageOnWizard, Setup must restart your computer. Would you like to restart now?
#else
  FinishedRestartLabel=Reboot Required
#endif

我正在使用上面的代码,但我无法将 {sd} 或 {tmp} 等动态路径用于 fileexists 函数。

任何人都可以帮忙吗?

4

1 回答 1

2

在澄清您的问题后,我们发现您实际上想要检查某个文件是否存在并FinishedLabel在运行时有条件地更改标题。

#emit或简而言之,#预处理器使用起始语句。预处理在编译之前运行。它允许您有条件地修改脚本,即在此过程完成后编译。因此,使用上面的脚本,您实际上是在检查文件是否c:\RebootFile.txt存在于正在编译设置的机器上,并根据结果选择FinishedRestartLabel消息的值。但它永远不会将两个文本都编译到 setup 二进制文件中。

您可以通过FinishedLabel这种方式修改代码中的标题。在那里您可以毫无问题地扩展常量:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Code]
function NeedRestart: Boolean;
begin
  Result := True;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if not FileExists(ExpandConstant('{sd}\RebootFile.txt')) then
    WizardForm.FinishedLabel.Caption := 'RebootFile NOT found. Restart ?'
  else
    WizardForm.FinishedLabel.Caption := 'RebootFile WAS found. Restart ?';
end;
于 2013-08-01T07:49:30.493 回答