AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Programmversion auslesen

Ein Thema von messie · begonnen am 13. Jun 2006 · letzter Beitrag vom 16. Jun 2006
Antwort Antwort
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

Programmversion auslesen

  Alt 13. Jun 2006, 10:52
Ich möchte gerne mit BCB die Version meines Programms auslesen. Beispiele für Delphi gibt es hier einige, die habe ich auch schon mal verwendet. Im BCB klemmt es noch: ich bekomme unsinnige Anzeigen, die sich auch mit jedem Aufruf ändern.
So sieht der Code aus:
Code:
AnsiString s;
  char *buffer;
  unsigned char version;
  unsigned int i;
  DWORD handle;        // Dummy
  unsigned int Len;    // Dummy

  s = Application->ExeName;
  i = GetFileVersionInfoSize(s.c_str(),&handle);
  buffer = new char [i];
  GetFileVersionInfo(s.c_str(),0,i,buffer);
  VerQueryValue(buffer, "\\StringFileInfo\\040704E4\\FileVersion" ,(void **) &version, &Len);
  ShowMessage(version);
Sieht ein bisschen so aus, als würde da ein Pointer in der Luft hängen...

Grüße, Messie
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: Programmversion auslesen

  Alt 15. Jun 2006, 10:19
Also erstmal wird "buffer" nicht getestet, die Allozierung könnt auch fehlschlagen.

Hast du "\\StringFileInfo\\040704E4\\FileVersion" vorher enumeriert, so daß du sicher sein kannst, daß es exakt diesen Eintrag auch gibt?!
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Programmversion auslesen

  Alt 15. Jun 2006, 15:07
Zitat von Olli:
Hast du "\\StringFileInfo\\040704E4\\FileVersion" vorher enumeriert, so daß du sicher sein kannst, daß es exakt diesen Eintrag auch gibt?!
Hallo Olli,
die StringFileInfo funzt so unter Delphi. Da es eine API-Funktion ist gibt es für mich keinen Grund dort andere Daten zu erwarten. Dazu kommt der Effekt, daß sich die Ausgabe von Mal zu Mal ändert, deshalb vermute ich den Fehler woanders.
Zur Allokation von buffer: wie kann ich die denn prüfen? Denn new gibt ja keinen Wert zurück. Muß ich da über lasterror o.ä. gehen?

Grüße, Messie
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: Programmversion auslesen

  Alt 15. Jun 2006, 15:45
Code:
if(buffer = new char [i])
{
...
  delete[] buffer;
}
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Programmversion auslesen

  Alt 16. Jun 2006, 09:59
Tja, new scheint nicht zu funktionieren trotzdem die Zeile true liefert. Aber der Onlinedebugger zeigt eine nicht reale Adresse für buffer an - oder gibt es neuerdings einen Adreßraum mit Backslash? Auch das delete erzeugt eine accessviolation.
Muß also an der Zuweisung new char[] liegen. Aber die Länge von 1260 Byte für den Fileinforecord habe ich in Delphi auch, daran kann es nicht liegen.

Grüße, Messie
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

Re: Programmversion auslesen

  Alt 16. Jun 2006, 10:06
Nimm halt eine andere Funktion um den Speicher zu allozieren ... ich glaube den Versuch ist's allemal wert.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz