Я пишу updater программу в Delphi7, который будет выполнен однажды, но нуждается во многих файлах для выполнения.
Что я хотел бы достигание:
Кто-либо может рекомендовать хорошее решение? Я думал об использовании Установки Inno (слишком сложный для такой легкой задачи) или использовании самораспаковывающегося zip-файла (но как удалить файлы впоследствии)?
Спасибо!
Я использую ресурс для своей программы обновления. Я скомпилировал ресурс с помощью brcc32, чем скомпилировал программу обновления. когда программа обновления запускает самопроверку всего и записывает или обновляет новыми. но об этом процессе вы должны прямо написать, удалить привилегии там, где работают ваши программы.
Я добавляю образец кода ниже.
файл exe.rc
newprog RCDATA Application.exe
файл makeres.bat
brcc32 exe.rc
файл updater.dpr
{$R exe.res}
файл модуля и процедуры
procedure ExtractRes(resname,fname,ext:string);
var
rStream:TResourceStream;
fStream:TFileStream;
fNamex:string;
begin
fNamex:=ExtractFilePath(Application.ExeName)+fname+'.'+ext;
if not fileExists(fnamex) then
begin
try
rStream:=tresourcestream.Create(hinstance,ResName,RT_rcDATA);
fStream := TFileStream.Create(fnamex, fmCreate);
fStream.CopyFrom(rStream, 0);
finally
rStream.Free;
fstream.Free;
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
apath:string;
begin
if Timer1.Enabled then
Timer1.Enabled:=false;
apath:=ExtractFilePath(Application.ExeName);
lblMesg.Caption:='Backup old version';
Application.ProcessMessages;
if FileExists(apath+'Application_old.bak') then
DeleteFile(apath+'Application_old.bak') ;
while FileExists(apath+'Application.exe') do
begin
RenameFile(apath + 'Application.exe', apath + 'Application_old.bak');
sleep(1);
if FileExists(apath+'Application.exe') then
begin
lblMesg.Caption:='It seems application still running. Waiting for end';
if FileExists(apath+'Application_old.bak') then
DeleteFile(apath+'Application_old.bak');
DeleteFile(apath+'Application.exe');
end;
Application.ProcessMessages;
end;
lblMesg.Caption:='Creating New Version..';
Application.ProcessMessages;
ExtractRes('Application','Application','exe');
lblMesg.Caption:='Running New Version...';
Application.ProcessMessages;
WinExec(pchar(apath+'Application.exe'),sw_show);
Application.ProcessMessages;
Halt;
end;
Я думаю, что это может помочь в вашем вопросе 1,2,3. Для 4 можно расширить код.
Лично я бы использовал Inno Setup, так как он очень хорошо подходит для этого типа задачи. Удаление файлов очень просто с помощью сценариев событий и выполнения удаления как части шага пост-установщика.
Возможно, это не ответ Delphi, но если вы приобретете лицензию на WinRAR , вы можете использовать встроенную функцию простой настройки (вы сжимаете до sfx, а сценарий хранится в файле комментариев)
Очень проста в использовании, может очищаться после себя и прекрасно сжимается!