我的代码部分Pro1和Pro2中有两个程序,pro1从用户获取值,pro2使用该值,因此我希望这些程序以相同的顺序一个接一个地执行。 我知道我们可以使用Afetrinstall从[Run]部分调用过程。我可以使用单个Afterinstall以相同的顺序调用这两个程序Pro1和Pro2吗?
还有一件事,我如何根据代码中写入的条件在运行部分中调用特定的文件名?甚至可能吗?我可以不止一次调用相同的文件名。我是inno的新手,任何人都可以帮助我。
答案 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"
但是,只有当你正在运行时,这才有实际意义。某个外部安装程序,您需要使用不同的命令行参数多次调用它。我想不出有多次以同样的方式执行同一个应用程序的原因。