1

我想知道是否有人有关于如何使用 TJvProgramVersionCheck 组件通过 HTTP 执行检查的示例。

JVCL 示例目录中的示例未显示如何使用 HTTP

谢谢你

4

1 回答 1

2

您文件夹中包含的演示$(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到演示文件夹。(因为下一步需要重新编译。)

转到 Project->Options->Directories and Conditionals,然后将以下行添加到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属性,然后将FileFormatfrom更改hffXMLhffIni

versioninfolocal.ini从演示文件夹中删除或重命名。(如果你运行过一次应用程序,它会存储 http 位置信息,并且上面的更改会被覆盖。这需要一段时间才能找到。)

确保您的本地 http 服务器正在运行,并且该ProjectVersions_http.ini文件位于 web 根文件夹中。然后,您应该能够运行演示。表单出现后,单击Edit History按钮查看从远程版本信息文件中检索到的信息。您还将获得一份新副本,versioninfolocal.ini其中包含您在上面输入的已保存配置信息。

于 2011-12-19T14:09:05.343 回答