我想为 2 张 CD 上的旧程序制作安装程序,我想直接从光盘安装文件。
启动时,安装程序应检查是否存在某个文件,这意味着第一张 CD 已插入 cd rom 驱动器。这是该任务的代码:
[Files]
Source: {code: ??? }; Destination: {app}; flags:external;
[Code]
procedure InitializeWizard();
begin
if not FileExists('A:\Resource\CD1.GOB') xor
FileExists('B:\Resource\CD1.GOB') xor
// and so on, for every drive letter...
FileExists('Z:\Resource\CD1.GOB') then
Repeat
if MsgBox('Insert the first CD!', mbInformation, MB_OKCANCEL) = IDCANCEL then
ExitProcess(0);
Until FileExists('A:\Resource\CD1.GOB') or
FileExists('B:\Resource\CD1.GOB') or
// going through all letters again...
FileExists('Z:\Resource\CD1.GOB') = true;
所以这按预期工作。如果未插入 CD,因此找不到文件,将显示一条消息,要求用户插入 CD。
但我想知道是否有更好的方法来增加驱动器号,因为这是一团糟。
其次,如何保存完整的文件路径并将其传递给 [Files] 部分?
我希望你能帮我解决这个问题!
更新:
我再次尝试并想出了这个:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageId = wpWelcome then
begin
WizardForm.NextButton.Enabled := False;
repeat
for i:=0 to 31 do
dstr := (Chr(Ord('A') + i) + ':\Resource\CD1.gob');
until FileExists(dstr);
WizardForm.NextButton.Enabled := True;
end;
end;
但是使用此代码安装程序会在开始时冻结并且即使已插入 CD 也不会响应。