Installationsscript

  • ok->

    [autoit]


    #cs----------------------------------------------------
    Version 1.0 Installation von GhostScript und FreePDF
    09.10.2007
    #ce----------------------------------------------------
    #include <GUIConstants.au3>

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

    Local $install_title = "Softwareinstallation"
    Local $admin = "admin"
    Local $pwd = "pw"
    Local $software_titel = "FreePDF 3.24"
    Local $software1 = "gs854w32.exe"
    Local $software2 = "FreePDFXP3.24.EXE"

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

    ;GUI - Installationsabfrage
    $installGUI = GUICreate($install_title, 255, 70, -1, -1, BitOR($WS_CAPTION, $WS_SYSMENU));title,width,height..
    GUICtrlCreateLabel("Installation von "& $software_titel, 20, 11, 235, 20);text,left,top,width,height
    $b_install = GUICtrlCreateButton("installieren", 30, 40, 75, 23, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_DEFPUSHBUTTON));Buttom text,left,top,width,height
    $b_abbruch = GUICtrlCreateButton("abbrechen", 120, 40, 75, 23, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_DEFPUSHBUTTON));Buttom text,left,top,width,height
    GUICtrlSetState(-1, $GUI_FOCUS)
    GUISetState (@SW_SHOW,$installGUI)
    ;-----------------------------------
    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()

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

    Select
    case $msg = $b_install
    copy_files($software1)
    copy_files($software2)
    install_ghost($software1)
    install_freepdf($software2)
    delete_files($software1)
    delete_files($software2)
    MsgBox(0,$install_title,"Die Installation ist beendet. Bitte den Rechner neustarten!!",5)
    WinClose($install_title) ;schließen des Hauptinstallationsfensters

    case $msg = $b_abbruch
    Exit
    EndSelect
    Wend

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

    Func copy_files($filename)
    SplashTextOn($install_title,"Dateien werden kopiert. Bitte warten.") ;title,text,width of pix,height of pix,x pos,y pos,option=o title,top,center
    FileCopy($filename,"c:\temp\",9) ;Flag 9= 1+8 erstellt Dir und überschreibt File
    SplashOff()
    EndFunc

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

    Func delete_files($filename)
    FileDelete("C:\temp\"& $filename)
    EndFunc

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

    Func install_ghost($software)
    ;GUISetState(@SW_DISABLE, $installGUI)
    RunAsSet($admin, @Computername, $pwd) ;Adminrechte geben
    Run($software,"c:\temp\")
    RunAsSet() ;Adminrechte nehmen

    AutoItSetOption("WinTitleMatchMode", 2) ;Mode geändert - sucht nach irgendeiner Übereinstimmung
    If WinWaitActive("gs854w32.exe","",3) Then
    ControlClick("gs854w32.exe","",1,"&Setup") ;setup ausführen
    If WinWaitActive("AFPL") Then
    ControlCommand("AFPL","All Users","Button3","Check","") ;für alle User installieren
    ;Installation beginnen
    ControlClick("AFPL","",1004,"This install")
    ;Installation ist beendet - das Iconfenster lässt sich irgendwie nicht schließEndFunc
    WinWaitClose("AFPL") ;schließen des Installationsfensters
    EndIf
    Else
    MsgBox(0,"Error","Das benötigte Fenster ist nicht vorhanden.")
    Exit
    EndIf
    EndFunc

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

    Func install_freepdf($software)
    AutoItSetOption("WinTitleMatchMode", 2) ;Mode geändert - sucht nach irgendeiner Übereinstimmung

    RunAsSet($admin, @Computername, $pwd) ;Adminrechte geben
    Run($software,"c:\temp\")
    RunAsSet() ;Adminrechte nehmen

    If WinWaitActive("FreePDF XP 3.24") Then
    ControlClick("FreePDF XP 3.24","",7,"&Setup") ;Setup ausführen
    If WinWaitActive("FreePDF XP 3.24","&End") Then
    ControlClick("FreePDF XP 3.24","",4,"&End") ;Setup/Installation beenden
    EndIf
    EndIf
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von sunghost (11. Oktober 2007 um 08:42)

  • hallo sunghost.

    hast du mal versucht, nach zeile 30, 31 und 32 eine Pause einzufügen.

    kann mir vorstellen, das sich vllt. das Script verschluckt, wenn die Schritt zu schnell nacheinander aufgerufen werden.

    in zeile 9 und 10 ist das der lokale admin? wenn ja okay.

    ansonsten mal die zeile "RunAsSet() ;Adminrechte nehmen" weiter ans Ende der Funktion schieben.

    ansonsten wird sicherlich nochd er eine oder andere heute über den beitrag stoßen und helfen.

    gruss, lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Arbeitet Autoit nicht eine Zeile nach der anderen ab? Ich habe es dennoch ausprobiert und eine Pause gesetzt. Dies hat leider keinen Erfolg gebracht. Auch das versetzen des RunAsSet-Befehls funkt. nicht.
    Ich möchte noch einmal anmerken, dass es direkt vom Client ausgeführt, funktioniert. Der einzige Unterschied ist der Speicherort.

  • Vielleicht klappt es ja so?

    Spoiler anzeigen
    [autoit]

    #cs----------------------------------------------------
    Version 1.0 Installation von GhostScript und FreePDF
    09.10.2007
    #ce----------------------------------------------------
    #include <GUIConstants.au3>

    Local $install_title = "Softwareinstallation"
    Local $admin = "admin"
    Local $pwd = "pw"
    Local $software_titel = "FreePDF 3.24"
    Local $software1 = "gs854w32.exe"
    Local $software2 = "FreePDFXP3.24.EXE"

    ;GUI - Installationsabfrage
    $installGUI = GUICreate($install_title, 255, 70, -1, -1, BitOR($WS_CAPTION, $WS_SYSMENU));title,width,height..
    GUICtrlCreateLabel("Installation von "& $software_titel, 20, 11, 235, 20);text,left,top,width,height
    $b_install = GUICtrlCreateButton("installieren", 30, 40, 75, 23, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_DEFPUSHBUTTON));Buttom text,left,top,width,height
    $b_abbruch = GUICtrlCreateButton("abbrechen", 120, 40, 75, 23, BitOR($GUI_SS_DEFAULT_BUTTON, $BS_DEFPUSHBUTTON));Buttom text,left,top,width,height
    GUICtrlSetState(-1, $GUI_FOCUS)
    GUISetState (@SW_SHOW,$installGUI)
    ;-----------------------------------
    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()

    Select
    case $msg = $b_install
    copy1_files($software1)
    copy2_files($software2)
    install_ghost($software1)
    install_freepdf($software2)
    delete1_files($software1)
    delete2_files($software2)
    MsgBox(0,$install_title,"Die Installation ist beendet. Bitte den Rechner neustarten!!",5)
    WinClose($install_title) ;schließen des Hauptinstallationsfensters

    case $msg = $b_abbruch
    Exit
    EndSelect
    Wend

    Func copy1_files($software1)
    SplashTextOn($install_title,"Dateien werden kopiert. Bitte warten.") ;title,text,width of pix,height of pix,x pos,y pos,option=o title,top,center
    FileCopy($software1,"c:\temp\",9) ;Flag 9= 1+8 erstellt Dir und überschreibt File
    SplashOff()
    EndFunc

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

    Func copy2_files($software2)
    SplashTextOn($install_title,"Dateien werden kopiert. Bitte warten.") ;title,text,width of pix,height of pix,x pos,y pos,option=o title,top,center
    FileCopy($software2,"c:\temp\",9) ;Flag 9= 1+8 erstellt Dir und überschreibt File
    SplashOff()
    EndFunc

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

    Func delete1_files($software1)
    FileDelete("C:\temp\"& $software1)
    EndFunc

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

    Func delete2_files($software2)
    FileDelete("C:\temp\"& $software2)
    EndFunc

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

    Func install_ghost($software1)
    ;GUISetState(@SW_DISABLE, $installGUI)
    RunAsSet($admin, @Computername, $pwd) ;Adminrechte geben
    Run($software1,"c:\temp\")
    RunAsSet() ;Adminrechte nehmen

    AutoItSetOption("WinTitleMatchMode", 2) ;Mode geändert - sucht nach irgendeiner Übereinstimmung
    If WinWaitActive("gs854w32.exe","",3) Then
    ControlClick("gs854w32.exe","",1,"&Setup") ;setup ausführen
    If WinWaitActive("AFPL") Then
    ControlCommand("AFPL","All Users","Button3","Check","") ;für alle User installieren
    ;Installation beginnen
    ControlClick("AFPL","",1004,"This install")
    ;Installation ist beendet - das Iconfenster lässt sich irgendwie nicht schließEndFunc
    WinWaitClose("AFPL") ;schließen des Installationsfensters
    EndIf
    Else
    MsgBox(0,"Error","Das benötigte Fenster ist nicht vorhanden.")
    Exit
    EndIf
    EndFunc

    Func install_freepdf($software2)
    AutoItSetOption("WinTitleMatchMode", 2) ;Mode geändert - sucht nach irgendeiner Übereinstimmung

    RunAsSet($admin, @Computername, $pwd) ;Adminrechte geben
    Run($software2,"c:\temp\")
    RunAsSet() ;Adminrechte nehmen

    If WinWaitActive("FreePDF XP 3.24") Then
    ControlClick("FreePDF XP 3.24","",7,"&Setup") ;Setup ausführen
    If WinWaitActive("FreePDF XP 3.24","&End") Then
    ControlClick("FreePDF XP 3.24","",4,"&End") ;Setup/Installation beenden
    EndIf
    EndIf
    EndFunc

    [/autoit]


    Zeile 8 & 9 na klar anpassen !!!

    Wenn es nicht funktioniert:
    Was macht das Script bzw. bis wo hin wird es ausgeführt? Werden die Dateien kopiert oder ist das schon nicht gegeben?
    Wenn kopiert wird, installiert er die erste Software und wenn nicht, bekommst Du eine Fehlermeldung?

    Nicht böse sein, aber ich versuche gerade das ganze zu durchdenken, da ich beide Softwarepakete hier nicht vorliegen habe und es somit ja auch nicht testen kann.

    Gruss, Lina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    2 Mal editiert, zuletzt von Alina (11. Oktober 2007 um 10:07)

  • welche Zeilen hast du geändert? sieht für mich identisch aus und bringt den selben fehler. die dateien werden noch kopiert und beim ausführen des 1. run. tritt der fehler auf.

    die sw ist übrigens free - einfach bei google mal freepdfxp suchen ;)

    Einmal editiert, zuletzt von sunghost (11. Oktober 2007 um 10:19)

  • Was verändert ist kannst Du doch durch abgleichen der beiden Scourcecodes sehen. Tools dafür gibt es im Netz (google nach "Datei vergleichen").

    Ansonsten versuche es mal mit:
    FileInstall("$software1,"c:\temp\"); statt Run($software,"c:\temp\")

    und beim zweiten Softwarepaket dann:
    FileInstall("$software2,"c:\temp\"); statt Run($software,"c:\temp\")

    Langsam kommt man vllt. mal eine Lsg. entgegen.

    Frage mich gerade, wieso Du nicht den IOM 3 nutzt? Hast Du dir den mal angesehen? Sehenswert, besonders weil man daraus viel lernen kann und es Dir vllt. auch bei diesem Problem helfen könnte.

    Gruss, Lina.

    edit: Fehler behoben

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (11. Oktober 2007 um 11:33)

  • so habe noch ein wenig rumprobiert und dabei ist mir aufgefallen, dass es am User liegen muss. Wenn ich einen Domainenuser mit lokalen Adminrechten nehme, funktioniert es. Da ich diesen aber nicht verwenden darf muss das andere auch irgendwie funktionieren.
    Was haltet ihr von dieser Idee: das Script vom Server ausführen. Das Script kopiert die Installationsdateien lokal und legt dort ein weiteres Script ab das es im Anschluss aufruft und die Installation weiter führt. Am Ende alles löschen.
    Ist das machbar?
    danke

  • klar is das machbar, die frage ist dann wahrscheinlich nur, welcher nutzer (mit welchen rechten) dann die installation "weiterführt"
    an das script setz ich mich gleich mal dran
    bis denn

  • also, ich hab das jetz ersma so aufgesplittet: das eine zum kopieren, das andere zum installieren, allerdings schreibt er das ins allgemeine autostartmenü und führt es halt aus, bei der nächsten anmeldung.

    weiß ja nicht genau, wie oder wer sich dann da anmeldet, aber wenns ein lokaler admin ist, geht das.

    falls du das direkt starten willst, geht das denk ich nur über remote.
    das findest du in der autoit-hilfe unter
    "macro reference\function reference\Obj/COM Reference\ObjCreate"

    hier die 2 scripte:


    kopieren:

    Spoiler anzeigen
    [autoit]

    #cs----------------------------------------------------
    Version 1.0 Installation von GhostScript und FreePDF
    <--Kopierscript-->
    09.10.2007
    #ce----------------------------------------------------

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

    Local $install_title = "Softwareinstallation"
    Local $admin = "admin"
    Local $pwd = "pwd"
    Local $software_titel = "FreePDF 3.24"
    Local $software1 = "gs854w32.exe"
    Local $software2 = "FreePDFXP3.24.EXE"

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

    copy_files($software1)
    copy_files($software2)

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

    Func copy_files($filename)
    SplashTextOn($install_title,"Dateien werden kopiert. Bitte warten.") ;title,text,width of pix,height of pix,x pos,y pos,option=o title,top,center
    FileCopy($filename,"\\Rechnername\c\Dokumente und Einstellungen\All Users\Startmenü",9) ;Flag 9= 1+8 erstellt Dir und überschreibt File
    SplashOff()
    EndFunc

    [/autoit]

    installieren:

    Spoiler anzeigen
    [autoit]

    #cs----------------------------------------------------
    Version 1.0 Installation von GhostScript und FreePDF
    <--Installierscript-->
    09.10.2007
    #ce----------------------------------------------------
    #include <GUIConstants.au3>

    Local $install_title = "Softwareinstallation"
    Local $admin = "admin"
    Local $pwd = "pwd"
    Local $software_titel = "FreePDF 3.24"
    Local $software1 = "gs854w32.exe"
    Local $software2 = "FreePDFXP3.24.EXE"

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

    install_ghost($software1)
    install_freepdf($software2)
    delete_files($software1)
    delete_files($software2)

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

    Func delete_files($filename)
    FileDelete(@StartupCommonDir & $filename)
    EndFunc

    Func install_ghost($software)
    ;GUISetState(@SW_DISABLE, $installGUI)
    RunAsSet($admin, @Computername, $pwd) ;Adminrechte geben
    Run($software,@StartupCommonDir)
    RunAsSet() ;Adminrechte nehmen

    AutoItSetOption("WinTitleMatchMode", 2) ;Mode geändert - sucht nach irgendeiner Übereinstimmung
    If WinWaitActive("gs854w32.exe","",3) Then
    ControlClick("gs854w32.exe","",1,"&Setup") ;setup ausführen
    If WinWaitActive("AFPL") Then
    ControlCommand("AFPL","All Users","Button3","Check","") ;für alle User installieren
    ;Installation beginnen
    ControlClick("AFPL","",1004,"This install")
    ;Installation ist beendet - das Iconfenster lässt sich irgendwie nicht schließEndFunc
    WinWaitClose("AFPL") ;schließen des Installationsfensters
    EndIf
    Else
    MsgBox(0,"Error","Das benötigte Fenster ist nicht vorhanden.")
    Exit
    EndIf
    EndFunc

    Func install_freepdf($software)
    AutoItSetOption("WinTitleMatchMode", 2) ;Mode geändert - sucht nach irgendeiner Übereinstimmung

    RunAsSet($admin, @Computername, $pwd) ;Adminrechte geben
    Run($software,@StartupCommonDir)
    RunAsSet() ;Adminrechte nehmen

    If WinWaitActive("FreePDF XP 3.24") Then
    ControlClick("FreePDF XP 3.24","",7,"&Setup") ;Setup ausführen
    If WinWaitActive("FreePDF XP 3.24","&End") Then
    ControlClick("FreePDF XP 3.24","",4,"&End") ;Setup/Installation beenden
    EndIf
    EndIf
    EndFunc

    [/autoit]
  • versuche es nun so:
    ich splitte die Datei, es gibt eine install.exe und eine worker.exe leider klappt der Aufruf von der install.exe noch nicht wirklich:

    [autoit]


    Local $worker_parameter = "worker.exe -install"
    Local $worker = "worker.exe"
    Run(@ComSpec & "-install"& $worker,"c:\temp\")

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

    auch dies funktioniert nicht:
    Run($worker_parameter,"c:\temp\")

    [/autoit]

    idee?

    Einmal editiert, zuletzt von sunghost (12. Oktober 2007 um 11:17)

  • hi

    warum nimmst du zum aufruf eine command?

    du kannst die worker.exe mit run auch direkt aufrufen
    und das -install kommt mir auch zu viel vor

    sprich würde dann heißen:

    [autoit]


    Run("C:\temp\worker.exe -install","C:\temp")

    [/autoit]

    Wozu überhaupt der parameter -install?
    kann deine worker auch was anderes, dass du sie mit dem parameter aufrufen musst?

    du musst den kompletten pfad der aufzurufenden datei eingeben, da er sonst nur im verzeichnis sucht, wo die aufrufende datei läuft (in dem fall auf dem server) und in den systemverzeichnissen

    Einmal editiert, zuletzt von Ceenen (12. Oktober 2007 um 11:19)

  • ups,
    habe eben meinen Beitrag über deinem editiert -> sieh dort - es geht auch nicht.
    ja ich versuche es mit Parameter, da es direkt vom Netzwerk aus nicht funktioniert -> siehe oben.

  • ich weiß ja nich, aber ich hab das jetz so verstanden, dass du den kopier UND den installationsvorgang vom server aus aufrufen willst und sobald du ein script vom server aufrufst, dass sich auf dem client befindet, startet es VOM client AUF DEM server..
    ich denke mal mit command is das genauso..deshalb musst du die installation entweder per hand vom client ausführen, oder per remote..dazu meinte ich ja brauchst du diese objects:

    autoit-hilfe:
    "macro reference\function reference\Obj/COM Reference\ObjCreate"

  • so wie ich es verstanden habe startet er es auf dem client, die gestartete datei liegt dabei nur auf dem server, also nix remote un so

  • @Ceenen - genau

    Ich bin auf dem Client mit eingeschränkten Benutzerrechten. Greife auf einen Fileserver zu und rufe von dort das Script aus. Dieses, so der aktuelle Stand, soll dann die zu installierenden Dateien, lokal kopieren, danach den ebenfalls kopierten worker, ausführen, der dann die Installation mit lokalen Adminrechten übernimmt.

  • ach soooooo!
    ich hab bis jetzt gedacht, du willst das vom server aus machen Oo
    ja, so gesehen, is dein script schon gut, wie es ist, das problem sind denk ich die lokalen rechte, wenn dann.
    das kopieren vom server aus, wie du meintest, ist kein problem.
    mit welchem user/admin hast du es denn versucht zu installieren, bzw. darfst es, weil ein domainuser mit lokalen admins geht ja, wie du sagtest.

  • Hi,
    ich habe es mit dem Domänenbenutzer kopiert, da der lokale Admin ja keine rechte hat ;) danach dann das Script als lokaler Admin ausgeführt.

  • und dann kannst du das als lokaler admin nicht ausführen mit runasset, sondern nur, wenn du dich direkt als dieser anmeldest?

  • Moin,

    es könnte vielleicht an folgendem liegen ...

    Aus der Hilfe zu RunAsSet:
    The "Secondary Logon service" or "RunAs service" must not be disabled if you want this function to work.

    D.h., "Secondary Logon service" oder "RunAs service" darf nicht deaktiviert sein. (...beim Client !)

    Prüfe doch einmal nach ob es nicht daran liegen könnte ...


    Gruß
    Greenhorn


    Einmal editiert, zuletzt von Greenhorn (12. Oktober 2007 um 16:07)