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 が既に挿入されていても応答しません。