Überprüfen ob etwas installiert wurde - Software-EInträge checken?

  • Hi,
    hab nochmal eine Frage , nach meinem letztes Projekt bin ich etwas auf den AutoIt Geschmack gekommen :P
    Was mich mal interessieren würde ob durch AutoIt auch Softwareeinträge checken kann, sodass überprüft wird, welche Programme bereits installiert wurden und welche nicht. Zum Beispiel nützlich bei einer unbeaufsichtigten Windowsinstallation.

    Dazu könnte man ja auch den Fileexist - Befehl nutzen doch gibt es einen Pfad für installierte Software?

    Grüße
    inselinc

    2 Mal editiert, zuletzt von Inselinc (22. April 2010 um 13:37)

  • Hallo,
    du kannst die Registry direkt abfragen, falls dort die installierte Software Einträge hinterlässt.
    Willst du prüfen ob die Insallation geklappt hat, oder ob von irgendwoher installierte (in einem bestimmten Verzeichnis neue) Programme vorhanden sind?

  • Hallo inselinc,

    normalerweise installiert Windows doch nach C:\ProgramFiles oder C:\Programme

    Allerdings legen fast alle Programme mit Setup auch eine Uninstall-Information in der REG ab. Kann gerade nicht schauen, da ich hier am Rechner keine Admin-Rechte habe.

    Gruß
    Pitter

  • ja am besten beides, aber vordergründig soll geprüft werden ob etwas installiert wurde. Also durch die registry einträge , kann ich dies einfach in den fileexist befehl einbauen?
    und wie kann am besten abgefragt werden ob die installation erfolgreich war?

    Grüße :D

  • [autoit]

    Regread

    [/autoit]

    sollte dir weiterhelfen, hier im Forum gibt es auch einiges zur automatischen Installation

    Zitat

    und wie kann am besten abgefragt werden ob die installation erfolgreich war?

    Indem die Log-Datei des Programm-Installers keine Fehler aufweist ^^ also in der letzten Zeile des Logs steht "Program sucessfully installed" oder etwas in der Richtung...
    Zur Not kann man den Installer starten und den Installer-Prozess überwachen, wenn dieser Prozess nicht mehr aktiv ist, dann ist das Programm installiert. Das würde auch bei Silent-Installs klappen

    • Offizieller Beitrag

    Vielleicht auch sowas:

    Spoiler anzeigen
    [autoit]

    #include<Array.au3>
    Local $re
    _ComputerGetSoftware($re)
    _ArrayDisplay($re, 'Software', -1, 0, '', '', 'Number|Name|Version|Publisher|Uninstall String')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; 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]

    [/autoit] [autoit][/autoit] [autoit]

    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)
    $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

    [/autoit] [autoit][/autoit] [autoit]

    $aSoftwareInfo[0][0] = UBound($aSoftwareInfo, 1) - 1
    If $aSoftwareInfo[0][0] < 1 Then
    SetError(1, 1, 0)
    EndIf
    EndFunc

    [/autoit]
  • 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
    [autoit]

    #include<Array.au3>
    Local $re
    _ComputerGetSoftware($re)
    _ArrayDisplay($re, 'Software', -1, 0, '', '', 'Number|Name|Version|Publisher|Uninstall String')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; 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]

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit] [autoit][/autoit] [autoit]

    $aSoftwareInfo[0][0] = UBound($aSoftwareInfo, 1) - 1
    If $aSoftwareInfo[0][0] < 1 Then
    SetError(1, 1, 0)
    EndIf
    EndFunc

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"