Return value 从命令行应用程序向Inno安装程序传递字符串值

Return value 从命令行应用程序向Inno安装程序传递字符串值,return-value,inno-setup,Return Value,Inno Setup,该场景是,我们有一个客户端/服务器应用程序,客户端安装是一个引导程序,使用Inno安装程序从IP/端口号指定的服务器下载客户端。我们希望能够通过UDP广播检测本地网络上是否有服务器,并可以编写一个控制台应用程序来实现这一点。问题是,我们如何将信息从控制台应用程序传递给安装程序 我可以捕获返回代码,但那只能是int。据我所知,Inno Setup中读取文件的唯一函数在预处理器中,因此我们无法读取console应用程序在运行时创建的文件。我能想到的唯一一件事是返回一个int,其中前4位是端口前面的“

该场景是,我们有一个客户端/服务器应用程序,客户端安装是一个引导程序,使用Inno安装程序从IP/端口号指定的服务器下载客户端。我们希望能够通过UDP广播检测本地网络上是否有服务器,并可以编写一个控制台应用程序来实现这一点。问题是,我们如何将信息从控制台应用程序传递给安装程序

我可以捕获返回代码,但那只能是int。据我所知,Inno Setup中读取文件的唯一函数在预处理器中,因此我们无法读取console应用程序在运行时创建的文件。我能想到的唯一一件事是返回一个int,其中前4位是端口前面的“.”和:的位置,然后解析出值,这看起来很粗糙、脆弱且容易出错,特别是考虑到我不太熟悉用于构造字符串的Inno Setup语法/函数


有什么建议吗?

不知道如何从命令行加载参数,但您可以使用
LoadStringFromFile
加载文件内容,或使用
GetIniString
从ini文件读取参数

一般来说,在Inno安装帮助文件中查找“支持函数参考”。本页将列出所有Inno函数(不包括预处理器)。如果找不到此页面(如果只找到有关预处理器的信息),则可能是查找了错误的帮助文件。请注意,Inno设置帮助目录并不是很好,但是索引非常好


命令行参数记录在“设置命令行参数”页面中。您可能可以通过使用一个现有参数来欺骗Inno,但使用ini文件似乎是最简单的方法。

InnoSetup包括一种解释的类似Pascal的扩展语言,可以在安装程序运行时用于很多事情


例如,我知道它可以读取注册表,而且我相当肯定它可以读取文件,至少从一些文件夹读取。您的控制台模式应用程序可以写入临时文件或删除一个或多个注册表项,其中包含安装程序其余部分所需的信息,这些信息可以从脚本环境返回到安装脚本中。安装程序甚至可以在以后清理临时文件和/或密钥。

来自Inno安装手册:

{param:ParamName | DefaultValue}

Embeds a command line parameter value.
    * ParamName specifies the name of the command line parameter to read from.
    * DefaultValue determines the string to embed if the specified command 
      line parameter does not exist, or its value could not be determined.
例如:

[设置] AppId=。。。 AppName={param:exe_name | xyz}.exe


更多信息:www downloadatoz com/manual/in/inno setup/topic_consts.htm

如果要从inno setup中的代码解析命令行参数,请使用类似的方法。只需从命令行调用安装程序,如下所示:

c:\MyInstallDirectory>MyInnoSetup.exe -myParam parameterValue
然后,您可以像这样调用
GetCommandLineParam
,无论您在哪里需要它:

myVariable:=GetCommandLineParam('-myParam');
{========================================================================================================================}
{允许使用键/值组织进行标准命令行解析}
函数GetCommandlineParam(inParam:String):String;
变量
LoopVar:整数;
BreakLoop:布尔型;
开始
{将变量初始化为已知值}
LoopVar:=0;
结果:='';
BreakLoop:=假;
{遍历传入的数组以查找参数}
而((LoopVar

希望这有帮助……

以上匿名答案应该被投票表决

通过在脚本中按名称引用参数,我可以将参数传递给我的安装程序:

{param:filePath|abc}
然后调用安装程序时,使用所需格式传递参数值:

MyInnoSetup.exe /filePath=../foo.exe

在我安装的版本中,至少看起来预处理器帮助被合并到主帮助文件中,尽管我记得它们在较旧版本的Inno中是分开的,在搜索索引时,很难区分哪些是ISPP,哪些不是。启动安装过程时,这是用于传递命令行参数的。安装程序执行一个命令行应用程序,需要将一个值返回到当前运行的安装程序。我认为代码在循环时遗漏了2个等号。它应该是:*while((LoopVar