从[Run] Afterinstall中调用[code]中的两个程序

时间:2014-01-22 07:15:23

标签: inno-setup

我的代码部分Pro1和Pro2中有两个程序,pro1从用户获取值,pro2使用该值,因此我希望这些程序以相同的顺序一个接一个地执行。 我知道我们可以使用Afetrinstall从[Run]部分调用过程。我可以使用单个Afterinstall以相同的顺序调用这两个程序Pro1和Pro2吗?

还有一件事,我如何根据代码中写入的条件在运行部分中调用特定的文件名?甚至可能吗?我可以不止一次调用相同的文件名。我是inno的新手,任何人都可以帮助我。

1 个答案:

答案 0 :(得分:11)

是否可以为“AfterInstall”参数分配多个功能?

不,这是不可能的,但你可以简单地从另一个调用一个函数。因此,您将为AfterInstall参数分配一个函数,并从指定的函数调用另一个函数调用。在脚本中它可能如下所示:

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; AfterInstall: AfterInstallProc

[Code]
procedure AfterInstallProc;
begin
  // do something here
  AnotherProcedure;
end;

procedure AnotherProcedure;
begin
  // do something else here
end;

是否可以有条件地为[Run]部分条目的“Filename”参数赋值?

是的,确实如此。您可以声明所谓的scripted constant,它是一个具有已分配函数的常量,您可以在其中将值返回给参数。在这样的脚本示例中:

[Run]
Filename: "{code:GetRunEntryFileName}";

[Code]   
function GetRunEntryFileName(Value: string): string;
begin
  // the "SomeCondition" is meant to be a certain variable or statement which
  // evaluates upon your needs; to the Result you'll return the same as you'd
  // write in the script including constants, like e.g. '{app}\MyProg.exe'
  if SomeCondition then
    Result := 'calc.exe'
  else
    Result := 'charmap.exe';
end;

您可以申请[Run]部分的所有参数,但Flags参数除外,这些参数必须在编译时知道。

我可以从[运行]部分执行相同的应用程序吗?

是的,你可以。本节并不关心您正在执行的内容,因此甚至可能存在完全相同的条目,或者只是同一个应用程序的条目多次。所以即便如此:

[Run]
Filename: "{app}\MyProg.exe";
Filename: "{app}\MyProg.exe";
Filename: "{app}\MyProg.exe"; Parameters: "/x"

但是,只有当你正在运行时,这才有实际意义。某个外部安装程序,您需要使用不同的命令行参数多次调用它。我想不出有多次以同样的方式执行同一个应用程序的原因。