1

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;
4

2 に答える 2

8

ファイル バージョンにリモートでアクセスすることはできません。最初にファイルをローカルにダウンロードするか、ダウンロード可能な別のファイルにファイル バージョンを保存するか、クライアントが要求を送信してアクセスできるサーバー側スクリプトを作成する必要があります。ファイル バージョンを確認し、クライアントに返します。

代わりに、HTTP の組み込みの「条件付き GET」機能を使用することをお勧めします (サーバーがサポートしている場合)。クライアントはリクエストに「If-Modified-Since」ヘッダーを含めることができます。サーバーは、リクエストされたタイムスタンプの後にサーバー側で変更された場合にのみ、リクエストされたファイルを配信します。そうし304ないと、クライアントがすでに最新のファイルを持っていることを示す応答コードが返されます。詳細については、 RFC 2616 セクション 14.25を参照してください。

于 2012-10-03T00:06:49.553 に答える
6

ファイルを物理的に検査しないとチェックできませんFileVersion 。つまり、すべてのバイトを使用できるようにする必要があり、ファイル バージョン API 関数は物理ディスク ファイルを想定しています。(IOW、最初にファイルをローカルドライブにダウンロードしないと、これを行うことはできません。)

その上、とにかく HTTP を使用して既に完全にメモリにダウンロードしているGETため、そもそも帯域幅を節約していません。

別の方法 (オプションの場合) は、ローカル ファイルが代わりにダウンロードして読み取ることができるバージョン番号を含むファイルをサーバー上に置くことです。それができない場合は、おそらく運が悪く、完全なダウンロードを行う必要があります。

于 2012-10-02T23:27:04.663 に答える