Dateiversion einer .exe auslesen

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
__WEY
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 25
Registriert: Do, 11. Sep 2008 9:01

Dateiversion einer .exe auslesen

Beitrag von __WEY »

Hallo Leute!

Ich soll aus einer exe die Version auslesen. Diese steht ja normalerweise unter Eigenschaften->Version. Gibt es da eine Möglichkeit?

Besten dank im Vorraus!

WEY
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Dateiversion einer .exe auslesen

Beitrag von brandelh »

Hi,

handelt es sich um dein (Xbase++) Programm, das auf seine Versions-Infos zugreifen will
oder ist es eine x-beliebige EXE ?
Gruß
Hubert
__WEY
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 25
Registriert: Do, 11. Sep 2008 9:01

Re: Dateiversion einer .exe auslesen

Beitrag von __WEY »

Hi brandelh!

Es handelt sich um eien x-beliebige .exe.

WEY
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Dateiversion einer .exe auslesen

Beitrag von Tom »

Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Dateiversion einer .exe auslesen

Beitrag von Jan »

Code: Alles auswählen

FUNCTION GetFileVersion(cFile)

LOCAL cFileName := GetShortFileName(cFile)
LOCAL nStartAt  := 0
LOCAL nInfoLen  := DllCall("Version.dll", DLL_STDCALL, "GetFileVersionInfoSizeA", cFileName, @nStartAt)
LOCAL cVersion  := Space(nInfoLen)

IF nInfoLen > 0 .AND. DllCall("Version.dll", DLL_STDCALL, "GetFileVersionInfoA", cFileName, 0, nInfoLen, @cVersion) <> 0
   cVersion := Upper(cVersion)
   IF At("FILEVERSION", cVersion) == 0
      cVersion := StrTran(cVersion, chr(0) + chr(0), ">[@]<")
      cVersion := StrTran(cVersion, chr(0), "")
      cVersion := Upper(StrTran(cVersion, ">[@]<", chr(0)))
      IF (nStartAt := At("FILEVERSION", cVersion)) > 0
         nStartAt += 13
      ENDIF
   ELSEIF (nStartAt := At("FILEVERSION", cVersion)) > 0
      nStartAt += 12
   ENDIF
   IF nStartAt > 0
      nInfoLen := At(Chr(0), cVersion, nStartAt)
      cVersion := AllTrim(SubStr(cVersion, nStartAt, nInfoLen - nStartAt))
   ELSE
      cVersion := ""
   ENDIF
ENDIF

// Manchmal sind komische Zeichen vorneweg. Die müssen weg, sonst gibt das eine falsche Version.
DO WHILE .T.
   IF isDigit(SubStr(cVersion, 1, 1)) == .T. .OR. cVersion == ""
      Exit
    ELSE
      cVersion := SubStr(cVersion, 2)
   ENDIF
ENDDO

RETURN cVersion

*****************************************************************************************************************************
***
*****************************************************************************************************************************
FUNCTION GetShortFileName(cLongName)

LOCAL cShortName := Space(255)
LOCAL nNameLen   := 1

IF empty(cLongName)
   RETURN ('')
 ELSE
   IF Set(_SET_CHARSET) == CHARSET_OEM
      cLongName := ConvToAnsiCp(cLongName)
   ENDIF
   nNameLen := DllCall("Kernel32.DLL", DLL_STDCALL, "GetShortPathNameA", cLongName, @cShortName, Len(cShortName))
ENDIF

RETURN Left(cShortName, nNameLen)
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
__WEY
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 25
Registriert: Do, 11. Sep 2008 9:01

Re: Dateiversion einer .exe auslesen

Beitrag von __WEY »

Hammer! Vielen Dank, dass hat mir jetzt schon einen rechten Schritt weitergeholfen! =D> Ich hab gerade noch erfahren, dass diese Prüfung nicht nur von "lokalen" exe's ausgelsen werden soll, sondern auch von einer Webseite.

Er soll so zusagen die Version meiner lokalen exe, mit der Version der Exe von diesem Link: http://federerag.ch/support/NetviewerK.exe vergleichen und dann die Datei herunterladen falls die lokale unaktueller ist als die auf dem Webserver. :shock:

Gibt es dazu eine DLL oder ähnlich mit sowas geht? Ich hoffe ich nerve nicht :confused2:
Jedenfalls schon mal vielen Dank für die GIGANTISCHE Hilfe meiner ersten Hürde!!!

WEY
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Dateiversion einer .exe auslesen

Beitrag von Tom »

Hallo, Wey.

Das dürfte relativ unmöglich sein, es sei denn, man lädt die Datei sowieso (temporär) herunter und prüft sie vor Ort, oder zusätzlich zu dieser Internet-Datei wird (in einer anderen Datei?) eine Versionsinformation angeboten. Die lokale API ist bei derlei wirkungslos.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Dateiversion einer .exe auslesen

Beitrag von brandelh »

Hi,

wie Tom geschrieben hat, wenn man selbst der Herr über die Website ist Infos in einer Textdatei hinterlegen.
Textdatei laden und auswerten.
Ansonsten Datei downloaden, prüfen und wenn neuer übernehmen.

Zum Laden von WEB Seiten (bzw. direkt Dateien daraus) kann man LoadFromUrl() (Asinet oder Phil's Sammlung) verwenden.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Dateiversion einer .exe auslesen

Beitrag von Jan »

Ich selber mache das mit einer zusätzlichen Textdatei. In der sind die Versionen der herunterladbaren Dateien vermerkt. Und erstmal wird nur die Textdatei runtergeladen, und dann Zeile für Zeile die jeweilige Datei ausgelesen. Ist die Datei auf dem Server neuer wird genau diese heruntergeladen. Was ich mit Phils LoadFromUrl mache.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
__WEY
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 25
Registriert: Do, 11. Sep 2008 9:01

Re: Dateiversion einer .exe auslesen

Beitrag von __WEY »

sauber Leute! Die Sache funzt :D
Antworten