# Installierte Software auslesen mit Java



## REC (12. Mai 2012)

Ich muss die installierte Programme plus ihre Version auflisten. 
Habe nun mal gegoogelt und habe gelesen das wenn man das mit den WMI Win32 Klassen macht bekommt man nicht alle Programme. Das habe ich nun auch so hinbekommen:


```
public String Programme() {
		this.query = "Select * from Win32_Product ";
		// WMI WQL Querry wird hier ausgeführt
		this.vCollection = axWMI.invoke("ExecQuery", new Variant(query));

		// Our result is a collection, so we need to work though the.
		EnumVariant enumVariant = new EnumVariant(vCollection.toDispatch());
		Dispatch item = null;
		while (enumVariant.hasMoreElements()) {
			item = (enumVariant.nextElement()).toDispatch();
			// Dispatch.call returns a Variant which we can convert to a java
			// form.
			String software = Dispatch.call(item, "Description").getString();
			
		
			return (software);
		}
		return null;
```
Aber die Ausgabe ist gerade mal:

```
Microsoft Visual C++ 2005 ATL Update kb973923 - x86 8.0.50727.4053
```

Wenn ich unter in der Systemsterung nachschaue sind es viel mehr Programme. Und wenn ich in der Registry(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall) nachschauen hat es dort auch nicht soviele Programme wie in der Systemsteuerung.??????:L

Wo muss ich nun suchen? Und vorrallem wie?


----------



## ...ButAlive (12. Mai 2012)

Hallo,


```
while (enumVariant.hasMoreElements()) {
            item = (enumVariant.nextElement()).toDispatch();
            // Dispatch.call returns a Variant which we can convert to a java
            // form.
            String software = Dispatch.call(item, "Description").getString();
            
        
            return (software);
}
```

Bricht die Schleife nach dem ersten gefunden Element ab und gibt dieses zurück. Du musst innerhalb der schleife alle Elemente einsammeln. Return darf erst nach der Schleife stehen.


----------



## REC (12. Mai 2012)

Ich habe nun ein Array gemacht und nun kommt tatsächlich einigs mehr 

Aber warum denn das? Eben weil  nach dem return die schleife komplett stehen blieb? 
So erhielt ich nur vom ersten Element die "Description"? Nun erhalte ich von allen Elementen die "Description"?


```
public ArrayList Programme() {
		this.query = "Select * from Win32_Product ";
		// WMI WQL Querry wird hier ausgeführt
		this.vCollection = axWMI.invoke("ExecQuery", new Variant(query));

		// Our result is a collection, so we need to work though the.
		EnumVariant enumVariant = new EnumVariant(vCollection.toDispatch());
		Dispatch item = null;
		ArrayList<String> programmListe = new ArrayList<String>();
		while (enumVariant.hasMoreElements()) {
			item = (enumVariant.nextElement()).toDispatch();
			// Dispatch.call returns a Variant which we can convert to a java
			// form.
			programmListe.add (Dispatch.call(item, "Description").getString());
			
		
			//return (programmListe);
		}
		return (programmListe);
```


----------



## REC (12. Mai 2012)

Mhm naja irgendwie bekomme ich nicht das was ich suche...

```
public void Programme() {
		this.query = "Select * from Win32_Product ";
		// WMI WQL Querry wird hier ausgeführt
		this.vCollection = axWMI.invoke("ExecQuery", new Variant(query));

		// Our result is a collection, so we need to work though the.
		EnumVariant enumVariant = new EnumVariant(vCollection.toDispatch());
		Dispatch item = null;
		ArrayList<String> programmListe = new ArrayList<String>();
		while (enumVariant.hasMoreElements()) {
			item = (enumVariant.nextElement()).toDispatch();
			// Dispatch.call returns a Variant which we can convert to a java
			// form.
			programmListe.add (Dispatch.call(item, "Name").getString());
			
			for(int i = 0; i < programmListe.size(); i++){
				System.out.println(programmListe.get(i));
			}
		}
		

	}
```

Das ist mal so ein Ausschnitt, irgendwie hilft mir das nicht...


```
NVIDIA PhysX
TortoiseSVN 1.6.16.21511 (64 bit)
Java(TM) 6 Update 31
Java(TM) 7 Update 3 (64-bit)
Java(TM) SE Development Kit 7 Update 3 (64-bit)
Bluetooth Win7 Suite (64)
Asmedia ASM106x SATA Host Controller Driver
Adobe Reader X (10.1.3) - Deutsch
Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.6161
VC90_CRT_x64
Asmedia ASM104x USB 3.0 Host Controller Driver
null
Microsoft Visual C++ 2005 Redistributable (x64)
Microsoft Visual C++ 2005 Redistributable
Microsoft Games for Windows Marketplace
Windows Live ID Sign-in Assistant
null
```


----------

