我想知道是否有人有一个关于如何使用TJvProgramVersionCheck组件通过HTTP执行检查的例子。
JVCL示例目录中的示例没有显示如何使用HTTP
谢谢
包含在$(JVCL)ExamplesJvProgramVersionCheck
文件夹中的演示似乎能够做到这一点。编辑JVProgramVersionHTTPLocation
的属性,并将URL添加到它的VersionInfoLocation
列表(一个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
到demo文件夹。(由于下一步需要重新编译)
进入项目->选项->目录和条件,并将以下行添加到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
文件位于web根文件夹中。然后,您应该能够运行演示。表单出现后,单击Edit History
按钮以查看从远程版本信息文件检索到的信息。您还将拥有versioninfolocal.ini
的新副本,其中包含您在上面输入的保存配置信息。