[DUG] Virus scanning causing GetFileVersion to go slow
David O'Brien
Dave at iccs.co.nz
Tue Sep 25 10:14:21 NZST 2012
If it's on a server, could you install a service that checks the files
(locally), then reports via http or something like?
It could even "watch" the files, and keep the file versions, not needing
to check each time...
-----Original Message-----
From: delphi-bounces at listserver.123.net.nz
[mailto:delphi-bounces at listserver.123.net.nz] On Behalf Of Robo
Sent: Monday, 24 September 2012 6:54 p.m.
To: NZ Borland Developers Group - Delphi List
Subject: [DUG] Virus scanning causing GetFileVersion to go slow
Our program on start up checks for updates on a network drive by
comparing file version numbers against the local file.
The method runs quick on local files, but slow on the network file,
especially for files larger than 10MB. We found that disabling virus
scanning (Microsoft Forefront in this case) means the check is done in
less than 1sec instead of 10sec.
Anyone know a way to check the version number of a network file without
triggering the virus scanner? This is particularly problematic because
this runs every time the program starts, so start up time is increasing
by heaps.
Here's our code for checking file version:
function TFileVersion.ReadVersionInfo(sProgram: string; Major, Minor,
Release, Build : pWord)
:Boolean; var
Info: PVSFixedFileInfo;
//{$ifdef VER120} {Delphi 4 definition for this differs from D2 & D3}
// InfoSize: Cardinal;
//{$else}
InfoSize: UINT;
//{$endif}
nHwnd: DWORD;
BufferSize: DWORD;
Buffer: Pointer;
begin
BufferSize := GetFileVersionInfoSize(pchar(sProgram),nHWnd); {Get
buffer size}
Result := True;
if BufferSize <> 0 then begin {if zero, there is no version info}
GetMem( Buffer, BufferSize); {allocate buffer memory}
try
if GetFileVersionInfo(PChar(sProgram),nHWnd,BufferSize,Buffer)
then begin
{got version info}
if VerQueryValue(Buffer, '\', Pointer(Info), InfoSize) then
begin
{got root block version information}
if Assigned(Major) then begin
Major^ := HiWord(Info^.dwFileVersionMS); {extract major
version}
end;
if Assigned(Minor) then begin
Minor^ := LoWord(Info^.dwFileVersionMS); {extract minor
version}
end;
if Assigned(Release) then begin
Release^ := HiWord(Info^.dwFileVersionLS); {extract release
version}
end;
if Assigned(Build) then begin
Build^ := LoWord(Info^.dwFileVersionLS); {extract build
version}
end;
iDateTime := (Info^.dwFileDateMS) shl 32;
iDateTime := iDateTime + Info^.dwFileDateLS;
//always comes back zero for some reason
end else begin
Result := False; {no root block version info}
end;
end else begin
Result := False; {couldn't extract version info}
end;
finally
FreeMem(Buffer, BufferSize); {release buffer memory}
end;
end else begin
Result := False; {no version info at all in the file}
end;
end;
Thanks
Robo
_______________________________________________
NZ Borland Developers Group - Delphi mailing list
Post: delphi at listserver.123.net.nz
Admin: http://delphi.org.nz/mailman/listinfo/delphi
Unsubscribe: send an email to delphi-request at listserver.123.net.nz with
Subject: unsubscribe
More information about the Delphi
mailing list