首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >InnoSetup -在运行时设置DefaultDirName

InnoSetup -在运行时设置DefaultDirName
EN

Stack Overflow用户
提问于 2013-08-06 19:40:17
回答 1查看 5.7K关注 0票数 2

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

由于某些原因,下面的代码的行为似乎是将UsePreviousAppDir设置为yes。当我第二次安装这个应用程序时,路径最终被损坏了。

我想看到的价值是

C:\Our App\install_x,其中x对应于用户的选择。

它第一次工作,但第二次运行的结果如下所示:

C:\Our App\install_x\install_y,其中x对应于与第一个安装一起选择的值,y对应于在此安装过程中选择的值。

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

安装部分:

代码语言:javascript
运行
复制
[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

以及设置安装版本的方法:

代码语言:javascript
运行
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-07 14:29:22

通过以下黑客解决了这个问题。不确定设置`UsePreviousAppDir=no‘时为什么需要手动编辑字符串,但这是可行的

代码语言:javascript
运行
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18089020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档