我有一个应用程序需要在同一台机器上同时安装最多三个。
出于某种原因,以下代码的行为就像UsePreviousAppDir设置为yes一样。第二次安装应用程序时,路径最终会被破坏。
我想看的价值是
C:\Our App\install_x
其中x对应于用户的选择。
它第一次运行,但第二次运行会产生如下结果:
C:\Our App\install_x\install_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;
答案 0 :(得分:2)
通过以下黑客解决了这个问题。不确定为什么有必要在设置`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;