gpt4 book ai didi

file - 检查.exe文件的文件版本(服务器端),以及是否有较新的下载文件

转载 作者:行者123 更新时间:2023-12-03 18:53:56 24 4
gpt4 key购买 nike

我想指向http://somesite.com/somefile.exe并检查exe服务器端的文件版本,并将版本信息与计算机上已准备就绪的同一个.exe文件进行比较。如果服务器端文件较新,那么我想下载它。

我具有下载文件和检查文件版本的功能,但是我想检查文件版本是否比我计算机上的版本新。

我不想将exe下载到我的计算机上,然后检查文件版本。

这里有人能做到吗?

function GetVersion(sFileName:string): string;
var
VerInfoSize: DWORD;
VerInfo: Pointer;
VerValueSize: DWORD;
VerValue: PVSFixedFileInfo;
Dummy: DWORD;
begin
VerInfoSize := GetFileVersionInfoSize(PChar(sFileName), Dummy);
GetMem(VerInfo, VerInfoSize);
GetFileVersionInfo(PChar(sFileName), 0, VerInfoSize, VerInfo);
VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
with VerValue^ do
begin
Result := IntToStr(dwFileVersionMS shr 16);
Result := Result + '.' + IntToStr(dwFileVersionMS and $FFFF);
Result := Result + '.' + IntToStr(dwFileVersionLS shr 16);
Result := Result + '.' + IntToStr(dwFileVersionLS and $FFFF);
end;
FreeMem(VerInfo, VerInfoSize);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Http: TIdHTTP;
MS: TMemoryStream;
begin
Http := TIdHTTP.Create(nil);
try
MS := TMemoryStream.Create;
try
Http.OnWork:= HttpWork;

Http.Get('http://live.sysinternals.com/ADExplorer.exe', MS);
MS.SaveToFile('C:\ADExplorer.exe');

finally
MS.Free;
end;
finally
Http.Free;
end;

end;

最佳答案

您不能在没有物理检查的情况下检查文件的FileVersion,这意味着您必须具有所有可用字节,并且文件版本API函数需要一个物理磁盘文件。 (IOW,您必须先将文件下载到本地驱动器,然后才能执行此操作。)

此外,无论如何,您已经通过HTTP GET将其完全下载到内存中,因此您一开始就不会在带宽上节省任何内容。

替代方法(如果可以选择)是在服务器上拥有一个文件,该文件包含本地文件可以下载和读取的版本号。如果您无法执行此操作,则可能是您不走运,因此必须进行完整下载。

关于file - 检查.exe文件的文件版本(服务器端),以及是否有较新的下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com