Inno setup Inno安装程序-如何在安装期间检索环境变量?

Inno setup Inno安装程序-如何在安装期间检索环境变量?,inno-setup,Inno Setup,有没有办法在运行时将环境变量分配给变量?然后编辑它? 例如,客户端计算机在c:\Company\CoolProgram上安装了一个程序,该文件夹位置位于名为%InstallLocation%的变量中。因此,如果您回显%InstallLocation%,您将获得c:\Company\CoolProgram 我想在c:\Company中安装一个插件。这样CoolProgram和PlugIn将在c:\公司中并排放置。我了解到这可以通过定义一个变量并将%installLocation%分配给它,然后从变

有没有办法在运行时将环境变量分配给变量?然后编辑它? 例如,客户端计算机在c:\Company\CoolProgram上安装了一个程序,该文件夹位置位于名为%InstallLocation%的变量中。因此,如果您回显%InstallLocation%,您将获得c:\Company\CoolProgram

我想在c:\Company中安装一个插件。这样CoolProgram和PlugIn将在c:\公司中并排放置。我了解到这可以通过定义一个变量并将%installLocation%分配给它,然后从变量中删除\CoolProgram来实现。例如:

#定义PluginLocation GetEnv('InstallLocation')

#定义PluginLocation2 StringChange(PluginLocation,“\CoolProgram”,”)

所以,PluginLocation2=c:\公司,这很好。但这是在编译时进行的。生成计算机没有此环境变量,而且并非所有客户端都将具有相同的安装位置。因此%InstallLocation%实际上是空的,因此PluginLocation和PluginLocation2是空的

因此,我尝试将变量定义向下移动到[Setup],希望在运行时在客户端上查找环境变量。那似乎不起作用。我也尝试了[Files],因为我有文件要移到新文件夹中,但[Files]似乎也在编译过程中。

我想

procedure Test ()  ;
begin
  MsgBox(ExtractFileDir(ExpandConstant( '{app}' ) ) , mbConfirmation, MB_YESNO ) ;      
end;
这就是你要找的

ExpandConstant(“{app}”)
将返回安装应用程序的位置


而且:
ExtractFileDir
将从
c:\Company\CoolProgram
获得
c:\Company
,谢谢。这并不完全是我所需要的,但在另一个网站的帮助下,我发现我可以从[setup]内部调用代码。如果是这样的话,我可以创建一个函数来获取环境变量,并在其上运行ExtractFileDir。例如:函数GetInstallFolder(Param:String):String;var InstallLocation:字符串;开始安装位置:=ExtractFileDir(GetEnv('InstallLocation');结果:=(安装位置);结束;然后在Setup:DefaultDirName={code:GetInstallFolder}内部,在几个系统上进行测试后,我发现一些客户机上的环境变量最后有一个\。因此,有些是c:\Company\CoolProgram,有些是c:\Company\CoolProgram\。对于那些有额外反斜杠的,显然我可以做第二个常数。但是,对于文件夹末尾没有\的客户端来说,这太过分了。所以现在不知何故,我需要考虑这两种情况;