Abfrage ob Voraussetzung erfüllt ist

  • Hallo zusammen,

    ich mache meine ersten Gehversuche mit AutoIt, um Software Installationen
    zu automatisieren.
    Hier habe ich nun ein Produkt, welche MS dotnet 2.0 voraussetzt.
    Wie kann ich das Abfragen, bzw. bestenfalls (falls dotnet 2.0 nicht vorhanden ist) ein Script aufrufen, welches dies gleich installiert?

    Würde mich über eine Antort sehr freuen
    Jörg

  • Hallo

    Dieses Script ließt die gesammte installiere Software aus.

    Vielleicht hilft es dir ja weiter =)

    Spoiler anzeigen
    [autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

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

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Product", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
    $Output = $Output & "Description: " & $objItem.Description & @CRLF
    $Output = $Output & "IdentifyingNumber: " & $objItem.IdentifyingNumber & @CRLF
    $Output = $Output & "InstallDate: " & $objItem.InstallDate & @CRLF
    $Output = $Output & "InstallLocation: " & $objItem.InstallLocation & @CRLF
    $Output = $Output & "InstallState: " & $objItem.InstallState & @CRLF
    $Output = $Output & "Name: " & $objItem.Name & @CRLF
    $Output = $Output & "PackageCache: " & $objItem.PackageCache & @CRLF
    $Output = $Output & "SKUNumber: " & $objItem.SKUNumber & @CRLF
    $Output = $Output & "Vendor: " & $objItem.Vendor & @CRLF
    $Output = $Output & "Version: " & $objItem.Version & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_Product" )
    Endif

    [/autoit]
    • Offizieller Beitrag

    Schau in der Registry, unter welchem Schlüssel der InstallPath eingetragen wird.
    Das fragst du beim Programmstart ab. Ist es nicht installiert bringt die Funktion einen Fehler. Daraufhin installierst du dotnet und anschließend die Produkt-SW.
    Tritt kein Fehler auf kannst du sofort die Produkt-SW installieren

    [autoit]

    $Path = RegRead ( "HKEY_LOCAL_MACHINE\SOFTWARE\.....", "InstallDir" )
    If @error Then
    ; nicht installiert ==> Installroutine dotnet starten
    EndIf
    ; Installcode Produkt-SW

    [/autoit]
  • In einem fall wäre das dann wohl

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework

    und der Schlüssel

    InstallRoot

  • Hm - sollte man da nicht lieber das Verzeichnis abfragen?
    Liegt unter "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" -
    wobei ich hier lieber mit "C:\WINDOWS\Microsoft.NET\Framework\v2*" arbeiten würde.

    Gruß
    Jörg

  • das verzeichnis kann unterschiedlich sein, der registryschlüssel is überall gleich
    ich zb installier die meisten programme auf D:\

    und auf ner standartinstallation ist der benutzer der davor sitzt eh meist admin, von daher gibt es keine probleme mit dem recht
    und lesender zugriff sollten eigentlich die meisten benutzer haben

    mfg

    2 Mal editiert, zuletzt von Ceenen (12. Oktober 2007 um 12:04)

  • Hi,

    ich hab die Abfrage mal mit einer Textbox probiert und
    so funktioniert die Abfrage jetzt:

    Spoiler anzeigen
    [autoit]


    If not FileExists(@WindowsDir & '\Microsoft.NET\Framework\v2*') Then
    ; nicht installiert ==> Installroutine dotnet starten
    MsgBox(16,"Datei nicht gefunden", "Datei nicht gefunden")

    EndIf
    ; Installcode Produkt-SW
    MsgBox(64,"Datei gefunden", "Datei gefunden")

    [/autoit]

    Mit Abfrage auf den Reg Schlüssel bekomme ich das nicht hin.

    Einmal editiert, zuletzt von Baruse (12. Oktober 2007 um 13:32)

  • Hi,

    aber irgendwie klappt' s net
    "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727"
    lautet der Schlüssel;
    Wert gibt's keinen, da weitere Unterschlüssel vorhanden sind.
    Na egal - ich probier's mal mit Abfrage des Verzeichnisses;
    da ich mit "@WindowsDir" arbeite, sollte das ja in jedem Fall klappen.

    Mit welchem Aufruf würde ich nun ein weiteres Script aufrufen?
    Einfach mit "run", oder gibt es eine weitere Möglichkeit?

    Viele Grüße
    Jörg

  • Hallo,

    also ich muß ja echt sage: TOLLES Forum hier!
    schnelle, unkomplizierte Hilfe...

    Vielen vielen Dank!

    Hier die Lösung meines Problems:

    [autoit]


    #region ### Prüfung ob DotNet FX 2.0 vorhanden ###
    If not FileExists(@WindowsDir & '\Microsoft.NET\Framework\v2*') Then
    ; nicht installiert ==> Installroutine dotnet starten
    ShellExecuteWait("Dotnet.exe")
    EndIf
    ; Installcode Produkt-SW
    #endregion ### Prüfung ob DotNet FX 2.0 vorhanden ###

    [/autoit]