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
If $fu_ver1 > $fu_ver2 Then
FileCopy ($fuserver, $fulocal,1)
Exit
Else
; mache weiter
EndIf
#EndRegion ### frits updater
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
;---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"
$v1 = FileGetVersion($sV1) ;server File 1
$v2 = FileGetVersion($sV2) ;local File 2
$v1split = Stringsplit($v1, ".")
$v2split = Stringsplit($v2, ".")
;----------- 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]
$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
EndFunc ;==>_Updaten
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]updater.exe
[autoit]
$sV1 = "V:\Public\FritsUpdater\FritzStarter\FRiTS_Starter.exe"
FileCopy($sV1, "C:\bo.sys\bin\FRiTS_Starter.exe",1)
Sleep(2000)
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