# Versionsnummer von exe- und dll-Dateien auslesen



## plonk (16. März 2005)

Moin Forum,
weiß von Euch jemand, ob es in Java eine Methode gibt, mit der man die Versionsnummer von exe- und dll-Dateien unter Windows auslesen kann?
Und falls es so was nicht gibt, gibt es vielleich eine Möglichkeit die Versionsnummern "per Hand" auszulesen? Im Klartext sind die Nummern auf jeden Fall nicht hinterlegt, die müssten auf jeden Fall irgendwie dekodiert werden...

Erst einmal vielen Dank im vorraus


----------



## Thomas Darimont (16. März 2005)

Hallo!

Mit SWT kann man unter Windows (fast) alles machen...

Mittels kannst du die DLL Version der comctl32.dll aus dem Windows\System32 Verzeichnis auslesen:

```
/**
 * 
 */
package de.tutorials;

import org.eclipse.swt.internal.win32.DLLVERSIONINFO;
import org.eclipse.swt.internal.win32.OS;
import org.eclipse.swt.internal.win32.TCHAR;

/**
 * @author Administrator
 * 
 */
public class GetFileVersion {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		DLLVERSIONINFO dvi = new DLLVERSIONINFO();
		dvi.cbSize = DLLVERSIONINFO.sizeof;
		dvi.dwMajorVersion = 4;
		TCHAR lpLibFileName = new TCHAR(0, "comctl32.dll", true); //$NON-NLS-1$
		int hModule = OS.LoadLibrary(lpLibFileName);
		if (hModule != 0) {
			String name = "DllGetVersion\0"; //$NON-NLS-1$
			int procDllGetVersion = OS.GetProcAddress(hModule, name.getBytes());
			if (procDllGetVersion != 0)
				OS.Call(procDllGetVersion, dvi);

			System.out.println(dvi.dwMajorVersion + "." + dvi.dwMinorVersion
					+ "." + dvi.dwBuildNumber);

			OS.FreeLibrary(hModule);
		}
	}

}
```

Ausgabe bei mir:
5.81.4916

kannst du die DLL Versionen aller 32 Bit DLLs auslesen. ... dies ist mal die Methode die SWT von Haus aus liefert, man kann mittels SWT aber auch Funktionien aus der version.dll aus dem Windows\system32 Verzeichnis z.Bsp. die GetFileVersionInfoW
dazu bemühen.

Gruß Tom


----------



## f-zoid (17. März 2005)

Ok, das ist mal was zum testen...

nun hab ich aber ne weitere frage:

Beim Dependency walker ist es möglich nicht nur versionnummern von den exe-dateien auszulesen, sondern auch die abhängigkeiten zu ihren dlls.
ist in java auch hier schon was bekannt?

zudem, kann ich aus dem dateikopf erkennen, ob eine datei zum betriebssystem gehört oder ob es ein nachinstalliertes prog ist?

für ne antwort wär ich dankbar!


----------



## vincent2970 (23. März 2005)

Moin, ich habe versucht, das ganze nachzuvollziehen und habe mal ein eclipseProjekt angelegt in das ich das SWT incl. Sources eingebunden habe. Beim ausführen bekomme ich allerdings folgende Fehlermeldung:


```
Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-win32-3111 in java.library.path
	at java.lang.ClassLoader.loadLibrary(Unknown Source)
	at java.lang.Runtime.loadLibrary0(Unknown Source)
	at java.lang.System.loadLibrary(Unknown Source)
	at org.eclipse.swt.internal.Library.loadLibrary(Library.java:100)
	at org.eclipse.swt.internal.win32.OS.<clinit>(OS.java:18)
	at org.eclipse.swt.internal.win32.TCHAR.<clinit>(TCHAR.java:30)
	at GetFileVersion.main(GetFileVersion.java:14)
```

Im Java 2 SDK 5 gibts es die Klasse _java.lang.ClassLoader.loadLibrary_ scheinbar nicht. Oder habe ich da etwas falsch gemacht?


----------



## Thomas Darimont (24. März 2005)

Hallo!



> Im Java 2 SDK 5 gibts es die Klasse java.lang.ClassLoader.loadLibrary scheinbar nicht. Oder habe ich da etwas falsch gemacht?


Sicher gibt es die... das st nicht der Fehler. Du musst die swt-xxx.dll aus dem 
eclipse\plugins\org.eclipse.swt.win32_3.1.0\os\win32\x86 Verzeichnis ins Windows\System32 verzeichnis kopieren.

Gruß Tom


----------



## Hasba (5. April 2005)

Hallo bitte ein Code-Beispiel, wie man eine Verzeichnis mit mehreren Dateien(gleiche Endung und faste gleiche Struktur) auslesen und in ein JTable anzeigen. Die Dateien sehen so aus:
Aktiv-Passiv_Steuerung 4/1 - Tiny       %TEMP                 à?ð?ð?à?à?MXPRINT                          txt2ps -d 0.4 -if %TEMP | lp -d aps4_1    
also wirklich mit solche Leetzeichen.

Danke im voraus.
Gruss


----------



## plonk (12. April 2005)

Hmm, danke erstmal!
Allerdings lässt sich auf diese Art und Weise die Versionsnummer nur von einer Handvoll dll-Dateien auslesen. Der Großteil (so ca. 99%) wird nicht erkannt.
Ich hab unter  http://www.jniwrapper.com  eine Klassenbibliothek gefunden, die dasselbe erledigen soll, damit hab ich aber dieselben Probleme :-(

Ich werd mich dann mal nach anderen Lösungen umschauen!

Bis denn dann


----------



## Hasba (12. April 2005)

Hallo Plonk,
danke das hat sich erledigt! habe die Dateien auslesen können. jetzt bin beschäftigt mit einem anderen Problem: ich muss das MVS-Modell anwende. also ein TableModel aufbauen...etc also die Trennung zw. Daten, und Anzeige..etc. aht jemand eine Idee kann rgern meinen Code Posten er sit nicht so gross.
Danke


----------

