Демонстрация, включенная в вашу папку $(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
с сохраненной информацией о конфигурации, которую вы ввели выше.