/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Hvrfor hu'land kan Win95 ikke læse version~
Fra : PL


Dato : 26-12-01 12:28

Hej NG

Jeg håber I alle er kommer godt over det meste af Julen uden de store
vægtmæssige tiltag.

Jeg har en fast procedure mht. at læse programmets egen versionsnummer.
Problemet er bare, at Win95 ikke kan læse versionsnr. af min exefile, men
alle andre Win-versioner kan.

Proceduren ser således ud:

procedure PFUGetVersionsInfo(var ExePath, CopyRight:String);
var
RessourceVersionInfoSize : DWORD;
JustAJunkVariabel : DWORD;
VersionInfoPtr : Pointer;
TranslationPtr : Pointer;
TranslationPath : String;
InformationPtr : Pointer;
// VersionInfoSize : UINT;
VersionValue : String;
begin
RessourceVersionInfoSize := 0;
TranslationPath := '\\VarFileInfo\\Translation';
RessourceVersionInfoSize :=
GetFileVersionInfoSize(PCHAR(ExePath),JustAJunkVariabel);
if RessourceVersionInfoSize > 0 then begin
GetMem(VersionInfoPtr, RessourceVersionInfoSize);
GetFileVersionInfo( PCHAR(ExePath), 0,
RessourceVersionInfoSize, VersionInfoPtr);
VerQueryValue ( VersionInfoPtr, PCHAR(TranslationPath),
TranslationPtr, RessourceVersionInfoSize);
VersionValue := '\\StringFileInfo\\' +
IntToHex(LoWord(LongInt(TranslationPtr^)),4)+
IntToHex(HiWord(LongInt(TranslationPtr^)),4)+
'\\';
VerQueryValue ( VersionInfoPtr, PCHAR(VersionValue + 'CompanyName'),
InformationPtr, RessourceVersionInfoSize);
// CompanyValue.Caption := String(PCHAR(InformationPtr));
VerQueryValue ( VersionInfoPtr,PCHAR(VersionValue + 'LegalCopyRight'),
InformationPtr, RessourceVersionInfoSize);
CopyRight := String(PCHAR(InformationPtr));
VerQueryValue ( VersionInfoPtr, PCHAR(VersionValue + 'ProductName'),
InformationPtr, RessourceVersionInfoSize);
// ProductNameValue.Caption := String(PCHAR(InformationPtr));
VerQueryValue ( VersionInfoPtr, PCHAR(VersionValue + 'FileVersion'),
InformationPtr, RessourceVersionInfoSize);
ExePath := String(PCHAR(InformationPtr));
While Copy(ExePath,1,1)=' ' do System.Delete(ExePath,1,1);
While Copy(ExePath,Length(ExePath),1)=' ' do
System.Delete(ExePath,Length(ExePath),1);
VerQueryValue ( VersionInfoPtr, PCHAR(VersionValue + 'Comments'),
InformationPtr, RessourceVersionInfoSize);
// CommentsValue.Caption := String(PCHAR(InformationPtr));
FreeMem(VersionInfoPtr, RessourceVersionInfoSize);
end else begin
ExePath := '';
CopyRight := '';
end;
end;

Jeg bruger D4 og Win98

Vær hilset I gode Folk
PL



 
 
Thomas Rose (26-12-2001)
Kommentar
Fra : Thomas Rose


Dato : 26-12-01 21:42

Hej PL,

"PL" <jessie-peter@get2net.dk> wrote in message
news:a0ccao$g7$1@sunsite.dk...
> Jeg håber I alle er kommer godt over det meste af Julen uden de store
> vægtmæssige tiltag.

Tak... I lige måde...

>
> Jeg har en fast procedure mht. at læse programmets egen versionsnummer.
> Problemet er bare, at Win95 ikke kan læse versionsnr. af min exefile, men
> alle andre Win-versioner kan.

Først og fremmest vil jeg sige, at din funktion er lidt uoverskuelig, og
meget ekstensiv... jeg kan desværre ikke fortælle dig, hvorfor det IKKE
virker på en Win 95, men jeg kan fortælle, at jeg anvender nedenstående
funktion, jeg selv har skrevet, og endnu ikke har haft problemer med den.
Hvis du prøver den, og det enten virker eller ej, må du gerne lige skrive
tilbage (til gruppen, naturligvis)... jeg er da interesseret i at høre, om
der er et problem med Win 95 jeg ikke er opmærksom på.

Om funktionen:
Parametren AFileName indeholder filnavnet på din applikation (f.eks.
Application.ExeName), og AMajor, AMinor, ARelease, og ABuild returnerer
værdierne for de forskellige dele af versions-nummeret. Funktionen
returnerer 'true' hvis den kunne trække versionen ud, eller returneres
'false'. Funktionen virker desuden kun for 32-bit programmer.

Håber ikke du har problemer med de engelske kommentarer.. jeg koder altid
"på engelsk"

function GetFileVersion(const AFileName: string;
var AMajor, AMinor, ARelease, ABuild: Word): Boolean;
// Retrieves file version information
// Returns true if file info was found, false otherwise
var
Handle : DWORD;
FixedFileInfo : Pointer;
FixedFileInfoSize : UINT;
VerInfoSize : Integer;
VerInfo : Pointer;
begin
// Get size of and allocate memory for version information structure
VerInfoSize := GetFileVersionInfoSizeA(@AFileName[1], Handle);
GetMem(VerInfo, VerInfoSize);
try
// Get version information structure and get fixed file information
if not GetFileVersionInfoA(@AFileName[1], Handle, VerInfoSize, VerInfo) or
not VerQueryValueA(VerInfo, PChar('\\'), FixedFileInfo,
FixedFileInfoSize) then
// Failed
Result := False
else
// Return appropriate information
with PVSFixedFileInfo(FixedFileInfo)^ do begin
AMajor := HiWord(dwFileVersionMS);
AMinor := LoWord(dwFileVersionMS);
ARelease := HiWord(dwFileVersionLS);
ABuild := LoWord(dwFileVersionLS);

// Success!
Result := True;
end; // with
finally
FreeMem(VerInfo);
end; // try-finally
end; // GetFileVersion

Cheers,
Thomas




PL (26-12-2001)
Kommentar
Fra : PL


Dato : 26-12-01 23:09

Hej Thomas

På min Win98 virker din funktion fint, men med den samme EXE-file under
Win95 på den anden maskine virker den IKKE dvs, at den blot viser 4 x 0;

Jeg har testet om andre programmet kan vise deres version og har her bruget
'Bdeadmin.exe', versionen og diverse informationer vises normalt under
Egenskaber. Min Win95 er IKKE en Betaversion.

Jeg har ikke piller ved Windows, idet det er en gl. maskine med, som jeg
bruger som test, da den kun er på 16 mb Ram og 75 mhz Pentium.
Hver gang jeg har lavet et program færdigt, formatterer jeg harddisken og
geninstallerer Windows, så jeg ved, at programmet virker i Windows'
grundform og jeg har fået de rigte 'styrefiler' med.

SIDSTE NYT - Egenskaber viser heller ikke Versionen i maskinen med Win95, så
du kan godt gå ud fra, at din funktion.
Det kan være, at der er nogen i gruppen, som kan fortælle mig, hvordan man
så skal gøre, for at få versionen ind i EXE-filen udover den standardmåde,
som følger med D4, så versionen også kan vises i Win95.

Mvh
PL



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste