我想知道是否有人有关于如何使用 TJvProgramVersionCheck 组件通过 HTTP 执行检查的示例。
JVCL 示例目录中的示例未显示如何使用 HTTP
谢谢你
您文件夹中包含的演示$(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
属性,然后将FileFormat
from更改hffXML
为hffIni
。
versioninfolocal.ini
从演示文件夹中删除或重命名。(如果你运行过一次应用程序,它会存储 http 位置信息,并且上面的更改会被覆盖。这需要一段时间才能找到。)
确保您的本地 http 服务器正在运行,并且该ProjectVersions_http.ini
文件位于 web 根文件夹中。然后,您应该能够运行演示。表单出现后,单击Edit History
按钮查看从远程版本信息文件中检索到的信息。您还将获得一份新副本,versioninfolocal.ini
其中包含您在上面输入的已保存配置信息。