Das zurückgegebene Array der Funktion '_ComputerGetSoftware()' wies bei mir ziemlich viele leere Zeilen auf.
Dies lag an fehlenden "Displayname"-Unterschlüsseln der Applikationen. Habe das Script daraufhin wie folgt abgeändert:
Spoiler anzeigen
#include<Array.au3>
Local $re
_ComputerGetSoftware($re)
_ArrayDisplay($re, 'Software', -1, 0, '', '', 'Number|Name|Version|Publisher|Uninstall String')
;===============================================================================
; Description: Returns the Software information in an array.
; Parameter(s): $aSoftwareInfo - By Reference - Software Information array.
; Requirement(s): None
; Return Value(s): On Success - Returns array of Software Information.
; $aSoftwareInfo[0][0] = Number of Software Installed
; $aSoftwareInfo[$i][0] = Name ($i starts at 1)
; $aSoftwareInfo[$i][1] = Version
; $aSoftwareInfo[$i][2] = Publisher
; $aSoftwareInfo[$i][3] = Uninstall String
; On Failure - @error = 1 and Returns 0
; @extended = 1 - Array contains no information
; Author(s): Jarvis Stubblefield (support "at" vortexrevolutions "dot" com)
; Note(s):
;===============================================================================
Func _ComputerGetSoftware(ByRef $aSoftwareInfo)
Local Const $UnInstKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
Local $i = 1
Dim $aSoftwareInfo[1][4]
While 1
$AppKey = RegEnumKey($UnInstKey, $i)
If @error <> 0 Then ExitLoop
ReDim $aSoftwareInfo[UBound($aSoftwareInfo) + 1][4]
$aSoftwareInfo[$i][0] = StringStripWS(StringReplace(RegRead($UnInstKey & "\" & $AppKey, "DisplayName"), " (remove only)", ""), 3)
If $aSoftwareInfo[$i][0] = "" Then $aSoftwareInfo[$i][0] = $AppKey
$aSoftwareInfo[$i][1] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "DisplayVersion"), 3)
$aSoftwareInfo[$i][2] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "Publisher"), 3)
$aSoftwareInfo[$i][3] = StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "UninstallString"), 3)
$i += 1
WEnd
$aSoftwareInfo[0][0] = UBound($aSoftwareInfo, 1) - 1
If $aSoftwareInfo[0][0] < 1 Then
SetError(1, 1, 0)
EndIf
EndFunc