Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Грамотная загрузка приложения


Автор: former 7.1.2007, 14:34
Как грамотно сделать, чтобы при загрузке приложения (при показе заставки) проверялось наличие библиотек и других файлов, подключаемых к программе, а в случае отсутствия одного из них завершать программу не загружая формы? И всё это дело анимировать с помощью ProgresBar.

Автор: Sunvas 7.1.2007, 15:09
FileExists вернет существует ли файл

Автор: former 7.1.2007, 15:27
Sunvas, как проверить наличие файла я сам  знаю. А вот как закрыть приложение не выполняя:

Код

  Application.Initialize;  
  Application.CreateForm(........);
  SplashForm.Hide;
  SplashForm.Free;
  Application.Run;



Автор: Sunvas 7.1.2007, 15:30
Как? Кучка функций есть: 
halt;
exitprocess(0);
application.terminate;

Автор: Snowy 7.1.2007, 15:35
Просто не выполняй и всё...

Автор: Guedda 7.1.2007, 17:38
Код

begin
  if FileExists('...') then begin
    Application.Initialize;  
    Application.CreateForm(........);
    SplashForm.Hide;
    SplashForm.Free;
    Application.Run;
  end;
end.

Автор: former 7.1.2007, 18:03
Вот, вот. Так и пробовал, но при попытке запустить приложение, останавливается на первом begin.

Код

begin
  if FileExists(ExtractFilePath(Application.ExeName)+'abc.dll')=false then
  begin
    ShowMessage('Библиотека abcf.dll не найдена.');
    exitprocess(0);
  end
  else
  begin
    Application.Initialize;
    Application.Title := 'UpdateMaker v1.0';
    Application.CreateForm(...);
   SplashForm.Hide;
    SplashForm.Free;
    Application.Run;
  end;


Добавлено @ 18:06 
Упс, опечатался. smile 

Автор: Guedda 7.1.2007, 20:19
Попробуй просто мой вариант. Без else. У меня всё работает.
Вот привожу код для ясности:
Программа работает:
Код

program Project1;

uses
  Forms, SysUtils,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  if FileExists('C:\magent.exe') then begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.

Программа не работает:
Код

program Project1;

uses
  Forms, SysUtils,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  if FileExists('C:\_magent.exe') then begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.


Добавлено @ 20:21 
А если надо с мессагом:
Код

program Project1;

uses
  Forms, SysUtils, Dialogs,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  if FileExists('C:\_magent.exe') then begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end else begin
    ShowMessage('Файла нет!');
  end;
end.

Автор: dumb 8.1.2007, 06:16
Цитата(former @  7.1.2007,  14:34 Найти цитируемый пост)
проверялось наличие библиотек

при статическом импорте за тебя проверят и отругаются еще до передачи управления самой проге.

Автор: Sansa 9.1.2007, 17:36
Где-то так:

Код

program Project1;

uses
  Forms,
  SysUtils,
  Unit1 in 'Unit1.pas' {Form1},
    Windows;

{$R *.res}

const
  // Массив имен файлов необходимых библиотек
  REQ_LIB_ARR : array [0..2] of string = (
  'C:\Windows\explorer.exe',
  'Project1.exe',
  'missing_lib.dll'
  );

function CheckLibrary(const AFileName: string): Boolean;
begin
  try
    if FileExists(AFileName) then
      Result:= True
    else
    begin
      MessageBox(0, PChar(Format('Необходимый для работы программы файл "%s" не найден.', [AFileName])),
        'Проверка необходимых файлов', MB_OK + MB_ICONSTOP + MB_TOPMOST);
      Result:=False
    end;
  except
    MessageBox(0, PChar(Format('Ошибка при проверке файла %s!', [AFileName])),
      'Проверка необходимых файлов', MB_OK + MB_ICONSTOP + MB_TOPMOST);
    Result:= False;
  end;
end;

function CheckLibraries():Boolean;
var
  I: Integer;
begin
  Result:= True;
  for I:= Low(REQ_LIB_ARR) to High(REQ_LIB_ARR) do
  begin
    result:= Result and CheckLibrary(REQ_LIB_ARR[I]);
    if not Result then
      Break;
  end;
end;

begin
  Application.Initialize;
  if CheckLibraries then
  begin
    Application.CreateForm(TForm1, Form1);
     // Здесь создаем еще формы
    Application.Run;
  end
  else
    Application.Terminate;

end.


В массиве REQ_LIB_ARR перечисляешь все файлы, которые необходимы для работы программы. 

Автор: MetalFan 9.1.2007, 18:32
Цитата(former @  7.1.2007,  18:03 Найти цитируемый пост)
Вот, вот. Так и пробовал, но при попытке запустить приложение, останавливается на первом begin.

замени Application.ExeName на ParamStr(0)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)