Programm mit unbekanntem Namen installieren

  • Hallo,

    um mir die Arbeit zu erleichtern den Rechner-Fuhrpark up zu daten haben ich mir ein kleines Auto-IT-Skript geschrieben.
    Dieses prüft auf einem Fileserver ein Verzeichnis (z.B. \\FS\Update\JAVA\ oder...\Acrobat) und installiert die enthaltene Datei. Bis jetzt habe ich die aktuelle Datei immer umbenannt, also z.B. in JAVA.msi oder Adobe.msi. Im Skript habe ich dann ShellExecuteWait verwendet. Da die Dateien alle immer gleich heißen, egal welche Version drin ist,verliere ich leider hin und wieder den Überblick (habe ich da jetzt schon die aktuelle Version...).
    Daher würde ich das gerne ändern, dass ich da ne Datei Java7U25.msi rein packe und das Skript die automatisch installiert. Dadurch würde ich nämlich sehen, welche Programme ich schon geupdated habe.
    Wie kann ich das machen? Im Prinzip muss ich ja nur den Namen der Datei in eine Variable laden.

    Einmal editiert, zuletzt von Silece (17. September 2013 um 21:20)

  • Naja ich würde das so organisieren:

    1. Du legst auf deinem Networkshare für die verschiedenen Programme je einen Ordner an, so wie du es ja schon hast.
    2. Neue Setups kommen mit Versionsnummer in den jeweiligen Ordner, alternativ und vielleicht auch besser du benennst sie nach Hinzufügedatum, also z.B. JAVA-Setup_20130915.msi
    3. Dein Installationsscript auf dem Client Rechner vermerkt in einer DB oder Textdatei welche Updates es bereits installiert hat.
    4. Das Client Installationsscript muss nun zwei Dinge tun:
    a) Auf deinem Networkshare nachschauen welche Version die neueste ist (letzte Datei im jeweiligen Ordner)
    b) Nachschauen ob diese Version bereits in der DB als installiert vermerkt wurde, wenn nicht muss sie installiert und in der DB vermerkt werden, andernfalls ist der Client Rechner bereits "up2date" und kann das nächste Programm auf gleiche weise prüfen.

    Funktionen die diesbezüglich hilfreich sein sollten

    [autoit]


    _filelisttoarray
    iniread
    iniwrite

    [/autoit]
  • Hallo,

    zu 2. in dem Ordner liegt nur jeweils die aktuellste Version, wenn ich eine aktuellere rein packe, lösche ich die Vorgänger.
    zu 3.es geht dabei um die Erstausstattung von Computern mit Software. Da ist also in dem Sinn keine ältere drauf.

    $sJAVA = _FileListToArray($sFS_JAVA [, $sFilter = "msi" [, $iFlag = 1]])
    und dann im nächsten Schritt
    ShellExecuteWait ($sJAVA[, $sInstParams[, " "])

    oder wie sehe ich das?

  • Bei den Befehlen darfst du das [ ] nicht schreiben. In der Hilfe dient es lediglich dazu, optionale Parameter zu kennzeichnen.

    Zudem gibt _FileListToArray() ein Array zurück, wie der Name schon sagt.

    [autoit]

    #include <File.au3>

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

    $sFiles = _FileListToArray($sFS_JAVA, "*.msi", 1)

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

    For $i = 0 To $sFiles[0]
    ShellExecuteWait($sFiles[$i], $sInstParams)
    Next

    [/autoit]

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Zitat

    oder wie sehe ich das?

    Nein, aber so in etwa. Am besten schaust du dir die Beispiele zu _filelisttoarray in der Hilfe an. Ein anschließender Blick ins Array Tutorial von Bugfix würde sicher auch nicht schaden, da du scheinbar absoluter Autoit Anfänger bist.

    http://www.bug-fix.info/array_tut.htm

    Oder eben gleich den Code von PainTain nehmen, aber ob du das mit dem aktuellen Wissenstand verstehst ist eben eine andere Frage. Sein Script wäre im übrigen problematisch wenn du doch mal mehr als eine msi Datei im Ordner hast und eben nicht alle installiert werden sollen.

    EDIT: Sein Script ist sogar falsch, da filelisttoarray ein 1-based Array zurückgibt und in Feld 0 wo seine Schleife anfängt eben kein Dateiname zu finden ist, sondern nur die Anzahl der Treffer. Außerdem ist die Pfadangabe für shellexecute unvollständig, da filelisttoarray nur die Dateinamen und nicht den Pfad zurückgibt. Man muss sich den Pfad also zusammensetzen.

    Hier die korrigierte Fassung:

    [autoit]


    #include <File.au3>
    $sFS_JAVA = 'C:\DeinJavaOrdnerPfad\'
    $sInstParams = "-silent"
    $aFiles = _FileListToArray($sFS_JAVA, "*.msi", 1)

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

    For $i = 1 To $aFiles[0]
    ShellExecuteWait($sFS_JAVA & $aFiles[$i], $sInstParams)
    Next

    [/autoit]

    7 Mal editiert, zuletzt von misterspeed (15. September 2013 um 18:47)

  • EDIT: Sein Script ist sogar falsch, da filelisttoarray ein 1-based Array zurückgibt und in Feld 0 wo seine Schleif anfängt eben kein Dateiname zu finden ist, sondern nur die Anzahl der Treffer. Außerdem ist die Pfadangabe für shellexecute unvollständig, da filelisttoarray nur die Dateinamen und nicht den Pfad zurückgibt. Man muss sich den Pfad also zusammensetzen.

    Hier die korrigierte Fassung:

    [autoit]


    #include <File.au3>
    $sFS_JAVA = 'C:\DeinJavaOrdnerPfad\'

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

    $aFiles = _FileListToArray($sFS_JAVA, "*.msi", 1)

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

    For $i = 1 To $aFiles[0]
    ShellExecuteWait($sFS_JAVA & $aFiles[$i], $sInstParams)
    Next

    [/autoit]


    Uups... :whistling:
    Kommt davon wenn man Skripte einfach mal schnell im Browser schreibt, ohne wirklich hinzuschauen :D

    @TE: Ich würde dir empfehlen, peethebee's Buch über AutoIt zu lesen.
    Da du noch ein wenig unerfahren scheinst ;)

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Hallo an alle,

    super Danke für die tolle Hilfe!
    damit klappt das jetzt so, wie es soll.
    Die Lektüre habe ich mir auch ausgedruckt und werde sie mir durchlesen.

    DANKE!