Inno setup InnoSetup-在运行时设置DefaultDirName

Inno setup InnoSetup-在运行时设置DefaultDirName,inno-setup,Inno Setup,我有一个应用程序,需要允许在同一台机器上同时安装多达三个 出于某种原因,以下代码的行为就像UsePreviousAppDir被设置为yes一样。我第二次安装应用程序时,路径被破坏了 我想看到的价值是 C:\Our App\install\u x其中x对应于用户的选择 它在第一次运行时有效,但第二次运行的结果如下: C:\Our App\install\u x\install\u y,其中x对应于第一次安装时选择的值,y对应于此安装过程中选择的值 安装版本是从安装程序的第一个屏幕抓取的单选按钮选择

我有一个应用程序,需要允许在同一台机器上同时安装多达三个

出于某种原因,以下代码的行为就像UsePreviousAppDir被设置为yes一样。我第二次安装应用程序时,路径被破坏了

我想看到的价值是

C:\Our App\install\u x
其中x对应于用户的选择

它在第一次运行时有效,但第二次运行的结果如下:

C:\Our App\install\u x\install\u y
,其中x对应于第一次安装时选择的值,y对应于此安装过程中选择的值

安装版本是从安装程序的第一个屏幕抓取的单选按钮选择。如何消除此问题

设置部分:

[Setup]
AppName=Our App
AppId=Our App
AppVerName=Our App Version(CM)
DefaultDirName=C:\Our App
DefaultGroupName=Our Group Name
OutputDir=..\
OutputBaseFilename=mm_setup
DisableStartupPrompt=yes
Compression=zip
UsePreviousAppDir=no
VersionInfoDescription=Our App Setup
CreateUninstallRegKey=no
DirExistsWarning=no
以及设置安装版本的方法:

procedure gSetVersion;
begin
  if gVersionPage.SelectedValueIndex = 0 then
  begin
     gInstallArea := 'install_a';
  end
  else if gVersionPage.SelectedValueIndex = 1 then
  begin
     gInstallArea := 'install_b';
  end
  else if gVersionPage.SelectedValueIndex = 2 then
  begin
     gInstallArea := 'install_c';
  end
  WizardForm.DirEdit.Text := WizardDirValue + '\' + gInstallArea;
end;

通过以下破解方法解决了问题。不确定设置“UsePreviousAppDir=no”时为什么需要手动编辑字符串,但这是可行的

procedure gSetVersion;
var
   installVersionIndex: Integer;
   installDir: String;
begin
  case gVersionPage.SelectedValueIndex of
    0: gInstallArea := 'install_a';
    1: gInstallArea := 'install_b';
    2: gInstallArea := 'install_c';
  end

  //Set the default installation folder.
  //This is necessary because InnoSetup intermittently
  //ignores the 'UsePreviousAppDir=no' [Setup] directive
  //and because the 'DefaultDirName' directive gets populated
  //prior to the user selecting the install version
  installVersionIndex := Pos('install_', WizardDirValue);
  installDir := WizardDirValue;
  if installVersionIndex > 0 then
  begin
    Delete(installDir, installVersionIndex, 20); 
  end

  WizardForm.DirEdit.Text := installDir + '\' + gInstallArea;
end;

OT:您可以将您的
gSetVersion
过程简化为。谢谢@TLama。有关于我的主要问题的指针吗?@RobeN,
AppendDefaultDirName
指令仅在您浏览文件夹时影响路径,并且该指令的值为
yes
no
@RobeN,我们都是对的。也就是说,您可以使用
0
no
false
,因为该字符串由函数进行比较,所以它甚至不区分大小写。但是回到问题上来,StormeHawke,除了使用
WizardDirValue
变量之外,我看不出有任何错误。我更愿意扩展
DefaultDirName
指令的值。@StormeHawke-也许您可以发布整个代码(当然名称已更改),这样我们就可以编译它并测试结果了?最好为该指令定义一个常量。您可以简单地在一个地方维护它,并在脚本中释放它的值。例如,看看。