JEDI JVCL TJvProgramVersionCheck Как использовать HTTP - PullRequest
1 голос
/ 19 декабря 2011

Мне интересно, есть ли у кого-нибудь пример того, как можно использовать компонент TJvProgramVersionCheck, выполняющий проверку через HTTP.

В примере в директории примеров JVCL не показано, как использовать HTTP

спасибо

1 Ответ

2 голосов
/ 19 декабря 2011

Демонстрация, включенная в вашу папку $(JVCL)\Examples\JvProgramVersionCheck, кажется, способна сделать это. Отредактируйте свойства JVProgramVersionHTTPLocation и добавьте URL в список VersionInfoLocation (a TStrings). При необходимости вы также можете установить любое имя пользователя, пароль, прокси и порт.

Вам также необходимо добавить обработчик событий OnLoadFileFromRemote. Я не вижу ничего в демоверсии, которая бы соответствовала этому требованию, но исходный код говорит:

{ Simple HTTP location class with no http logic.
The logic must be implemented manually in the OnLoadFileFromRemote event }

Из параметров, которые получает событие, следует, что вы выполняете там проверку:

function TJvProgramVersionFTPLocation.LoadFileFromRemoteInt(
  const ARemotePath, ARemoteFileName, ALocalPath, ALocalFileName: string;
  ABaseThread: TJvBaseThread): string;

Таким образом, вам нужно добавить обработчик события для этого события, а затем изменить свойство TJVProgramVersionCheck.LocationType на pvltHTTP и запустить демонстрацию. После тестирования кажется, что вы предоставили сервер и имя файла для удаленной версии, а также локальный путь и временное имя файла для загружаемого файла. Result обработчика события должен быть полным путем и именем файла недавно загруженного файла. Ваш обработчик событий должен позаботиться о фактическом извлечении файла.

Существует пара дополнительных типов, определенных в JvProgramVersionCheck.pas, (TJvProgramVersionHTTPLocationICS и TJvProgramVersionHTTPLocationIndy, оба защищены определением компилятора, поэтому они не существуют в компиляции по умолчанию. Однако, установка связанного определения ICS Это приводило к множеству ошибок компиляции (по-видимому, оно было написано для старой версии ICS), а установка определения Indy (а затем повторная установка для использования Indy10) позволила его компилировать, но не изменилась любое поведение. Я собираюсь изучить это позже сегодня.

Также убедитесь, что в записи VersionInfoLocation указан только URL (без имени файла); само имя файла указывается в свойстве VersionInfoFileName. Если вы добавите его в URL, он будет повторяться (как в http://localhost/Remote/ProjectVersions_http.iniProjectVersions_http.ini, и в любом случае потерпит неудачу. (Я обнаружил это при трассировке через отладчик, пытаясь решить проблему).

Наконец ...

Решение немного (но не радикально) сложно. Вот что я сделал:

Скопируйте JvProgramVersionCheck.pas в демонстрационную папку. (Необходимо перекомпилировать из-за следующего шага.)

Перейдите в Проект-> Параметры-> Каталоги и Условия и добавьте следующую строку в запись DEFINES:

USE_3RDPARTY_INDY10;USE_THIRDPARTY_INDY;

Удалите компонент JvProgramVersionHTTPLocation из демонстрационной формы.

Добавить новый раздел private к объявлению формы:

private
  HTTPLocation: TJvProgramVersionHTTPLocationIndy;

В событие FormCreate добавьте следующий код:

procedure TForm1.FormCreate(Sender: TObject);
const
  RemoteFileURL = 'http://localhost/';
  RemoteFileName = 'ProjectVersions_http.ini';
begin
  HTTPLocation := TJvProgramVersionHTTPLocationIndy.Create(Self); // Self means we don't free
  HTTPLocation.VersionInfoLocationPathList.Add(RemoteFileURL);
  HTTPLocation.VersionInfoFileName := RemoteFileName;
  ProgramVersionCheck.LocationHTTP := HTTPLocation;
  ProgramVersionCheck.LocationType := pvltHTTP;
  VersionCheck;  // This line is already there
end;

В свойствах компонента ProgramVersionCheck разверните свойство VersionInfoFileOptions и измените значение FileFormat с hffXML на hffIni.

Удалите или переименуйте versioninfolocal.ini из папки демо. (Если вы запустили приложение один раз, оно сохраняет информацию о расположении http, а указанные выше изменения перезаписываются. Это заняло некоторое время для отслеживания.)

Убедитесь, что ваш локальный http-сервер работает, а файл ProjectVersions_http.ini находится в корневой веб-папке. После этого вы сможете запустить демо. Когда форма появится, нажмите кнопку Edit History, чтобы просмотреть информацию, полученную из файла информации об удаленной версии. У вас также будет новая копия versioninfolocal.ini с сохраненной информацией о конфигурации, которую вы ввели выше.

...