Script Updater mit Runas

  • hallo zusammen,

    ich habe hier ein umfangreiches script, welches bei jedem start die version prüft und dann ggf. bei einem update eine updater.exe startet!

    script auszug

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

    #Region ### frits updater
    $fuserver = "V:\Public\FritsUpdater\FritzStarter\FRiTS_Starter_Updater.exe"
    $fulocal = "C:\bo.sys\bin\FRiTS_Starter_Updater.exe"
    $fu_ver1 = FileGetVersion($fuserver) ;server File 1
    $fu_ver2 = FileGetVersion($fulocal) ;local File 2

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

    If $fu_ver1 > $fu_ver2 Then
    FileCopy ($fuserver, $fulocal,1)
    Exit
    Else
    ; mache weiter
    EndIf
    #EndRegion ### frits updater

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

    Global Const $Error_None = 0
    Global Const $Error_RunAdmin = -45
    If $CMDLINE[0] > 0 And $CMDLINE[1] = "-child" Then ; Wenn der Prozess mit dem Parameter "-child" gestartet wird, nur das update und nicht den Rest ausführen.
    If Not IsAdmin() Then Exit $Error_RunAdmin
    _Updaten(True)
    Exit $Error_None ; Erfolg
    Else
    _ProgrammBeenden()
    Switch IsAdmin()
    Case True
    _Updaten()
    Case False
    Switch RunAsWait($ADMINUSER, $DOMAIN, $ADMINPASS, 0, '"' & @ScriptFullPath & '" -child', @ScriptDir, @SW_HIDE)
    ;Switch ShellExecuteWait(@AutoItExe, $CMDLINERAW & ' -child', @ScriptDir, "")
    Case $Error_None
    If @error Then
    ; Fehler beim Starten
    Else
    ; Erfolg
    EndIf
    Case $Error_RunAdmin
    MsgBox(0, '', "Konnte den Vorgang nicht mit Adminrechten starten")
    Case Else
    MsgBox(0, '', "unbekannter Fehler")
    EndSwitch
    EndSwitch
    _ProgrammStarten()
    EndIf

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

    ;---functions----

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

    Func _Updaten($NeuerProzess = True)
    ;---Fileversion Frits Starter abrufen------
    $sV1 = "V:\Public\FritsUpdater\FritzStarter\FRiTS_Starter.exe"
    $sV2 = "C:\bo.sys\bin\FRiTS_Starter.exe"

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

    $v1 = FileGetVersion($sV1) ;server File 1
    $v2 = FileGetVersion($sV2) ;local File 2

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

    $v1split = Stringsplit($v1, ".")
    $v2split = Stringsplit($v2, ".")

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

    ;----------- prüfe fritzstarter ----

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

    $spl_1 = $v1split[1] & $v1split[2] & $v1split[3] & $v1split[4]
    $spl_2 = $v2split[1] & $v2split[2] & $v2split[3] & $v2split[4]

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

    $spl_erg = $spl_2 - $spl_1
    ;MsgBox(0,"", $spl_1 & "/" & $spl_2)
    ;MsgBox(0,"",$spl_erg)
    If $spl_erg < 0 Then
    ;If $v1 > $v2 Then
    GUICtrlSetData($label, '... Update "FRitS_Starter" vorhanden ...')
    Sleep(1000)
    GUICtrlSetData($label, "... bitte warten ...")
    Sleep(1000)
    Run(@ScriptDir & "\FRiTS_Starter_Updater.exe")
    Exit
    ;MsgBox (0,"", "Clientversion = " & @CRLF &$v1 & @CRLF & $v2)
    EndIf

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

    EndFunc ;==>_Updaten

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

    updater.exe

    [autoit]


    $sV1 = "V:\Public\FritsUpdater\FritzStarter\FRiTS_Starter.exe"

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

    FileCopy($sV1, "C:\bo.sys\bin\FRiTS_Starter.exe",1)
    Sleep(2000)

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

    Run("C:\bo.sys\bin\FRiTS_Starter.exe") ; an dieser stelle müsste jetzt die starter.exe mit dem useraccount ausgeführt werden ...

    [/autoit]

    der updateprozess funktioniert prima, aber jetzt das problem ...

    wenn ein update vorhanden ist, wird dieses ja als admin (wurde im RunAsWait übergeben) ausgeführt ... soweit so gut ..
    der updater kopiert auch die neue version als admin, auch gut ....
    jetzt kommt das problem, die neue version wird ebenfalls mit dem übergebenen user aus RunAsWait gestartet!!! das soll nicht so sein, hier soll jetzt das script mit dem am pc angemeldeten user ausgeführt werden ...

    wie kann ich dieses erreichen?
    jemand schon damit erfahrungen?

    hier ist auch schon ein post von mir zu dem thema, aber leider ist erst jetzt der fehler bekannt geworden ...
    [ offen ] RunAS

    danke

    gruß gmmg

    2 Mal editiert, zuletzt von gmmg (12. Oktober 2010 um 13:45)

  • Da sich die Rechte "vereerben" kannst das denke ich nur beheben wenn nach dem updaten den User ausloggst und er sich neu einloggen muss:

    [autoit]

    Shutdown (0)

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • na das bringt nichts, da sich der user ja am pc einloggt, seine 100 programme öffnet, eines davon ist dann das tool mit dem updater ...
    es muss auch anders gehen ... das das script wieder mit normalem useraccount ausgeführt wird ..

    früher gabs ja mal runasset(), damit gings wohl ...

    danke

    gruß gmmg

    Einmal editiert, zuletzt von gmmg (12. Oktober 2010 um 14:17)

  • Dann starte das Programm halt nach dem Update nicht automatisch neu und lass es den User per Hand neu starten.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • hallo chip,

    ja, das hab ich m ir auch schon gedacht, ist aber eben nicht die komfort lösung :)

    na vlt gibts noch nen anderen weg ....
    alternativ müssen die user auf die verzeichnisse berechtigt werden ...

    gruß gmmg