"RunAs" und ausführen als Administrator funktioniert nicht

  • Hi,

    ich habe bei mit einem simplen Script das Problem, dass die auszuführende Anwendung trotz "RunAs" nicht als Administrator ausgeführt wird.
    Ich erhalte stets die Meldung: "Sie müssen als Administrator angemeldet sein...".
    Führe ich das Script als lokaler Admin aus, funktioniert's.

    Verwendete Version:

    AutoIt: 3.3.0.0
    Scite: 1.77

    Das Script an sich:

    Code
    RunAs("administrator", @Computername, "Testpasswort", 0, @ScriptFullPath, @ScriptDir, @SW_HIDE)
    Run("flashplayer.exe")
    Exit
    
    
    ; Fenster schließen
    winwait("Adobe Flash Player ActiveX Installation: Fertig")
    ControlShow ("Adobe Flash Player ActiveX Installation: Fertig", "&Beenden","Button2")
    ControlClick ("Adobe Flash Player ActiveX Installation: Fertig", "&Beenden","Button2")

    Die "flashplayer.exe" und das Script (installation.exe) befinden sich im selben Verzeichnis (Netzwerkverzeichnis - freigegeben für alle User).
    "@Computername" habe ich eingesetzt, um die Ausführung als lokaler Administrator unabhängig von der verwendeten Workstation zu ermöglichen. Funktioniert jedoch genauso wenig wie der Eintrag einer Workstation. Z.B.: RunAs("administrator","PC1","Testpasswort",0,...)

    Ich hatte es auch schon mit der Prüfung (Admin ja/nein => isadmin) versucht, aber da bekomme ich das gleiche Ergebnis.
    Eigentlich sollte die Ausführung als Administrator mit obigen Zeilen funktionieren. Das tut's jedoch leider nicht, und ich komme auch nicht dahinter, wieso ?

    Hat vielleicht jemand 'nen Tip ?

    Einmal editiert, zuletzt von Niclas (26. März 2009 um 11:24)

  • Ah, umm......ok.

    Du meinst also "@ScriptFullPath, @ScriptDir" weglassen !? Oder soll ich die beiden Einträge ersetzen ?
    Wieso aber funktioniert das Script, wenn ich es als lokaler Admin ausführe ? Auch bei den normalen Usern funktioniert es soweit. Lediglich wird die Anwendung nicht unter dem Kontext des lokalen Admins installiert.

  • wenn du was installieren willst musst du admin rechte haben!

    mit runas musst du die installation starten ;)

  • Ok, das heißt im Klartext ?

    RunAs("administrator", @Computername, "Testpasswort", 0, @ScriptFullPath, @ScriptDir, @SW_HIDE)
    Run("flashplayer.exe")

    Der Eintrag "flashplayer.exe" gehört nicht unter "Run("flashplayer.exe")", sondern in die RunAs-Zeile und dort anstelle von "@ScriptFullpath" und "@ScriptDir" ?

  • [autoit]

    RunAs("administrator", @Computername, "Testpasswort", 0, @ScriptDir & "\flashplayer.exe")

    [/autoit]

    das hättest jetzt aba auch selber geschafft ^^

    Einmal editiert, zuletzt von K1773R (25. März 2009 um 15:15)

  • Das sagst Du jetzt... [Blockierte Grafik: http://www.bautforum.com/images/smilies/shifty.gif]

    Ich dank' Dir für Deine Hilfe.
    Nun ist jedoch der Fall eingetreten, dass das Script gar nicht ausgeführt zu werden scheint. Der Mauszeiger ändert sich ganz kurz, im Infobereich der Taskleiste blinkt das AutoIt-Icon für den Bruchteil einer Sekunde auf und das war's.
    Betrifft sowohl die Ausführung als normaler User als auch als lokaler Admin.

  • Ja, sind sie:

    Zitat

    Die "flashplayer.exe" und das Script (installation.exe) befinden sich im selben Verzeichnis (Netzwerkverzeichnis - freigegeben für alle User).

  • Netzwerkverzeichnisse nimmt autoit nicht so gern, auch dann nicht wenns für jeden freigegeben ist.
    fü eine installation schlage ich folgendes vor:

    -Netzlaufwerk verbinden
    -Installationsdateien kopieren
    -Netzlaufwerk trennen
    -Installation ausführen

    Das funzt ziemlich stabil

  • Aber eigentlich funktioniert das auch mit "Netzwerkverzeichnissen" ich nehme an du meinst eine UNC-Pfad?

    Weil das funktioniert eigentlich immer 100pro, weil es nichts anderes wie eine Laufwerksverknüpfung ist.

    Code
    UNC-Pfad: \\Servername\Freigabename\Pfad

    Es müssten als Administrator sogar die administrativen Freigaben funktionieren.
    c$, d$ ....

    Das ganze ist nur eben ohne Laufwerksbuchstaben.

    MfG
    Der_Doc

  • So hatte ich es auch erst versucht, aber so ganz optimal lief das nicht.

    Vermute dabei ein Problem mit den Rechten. hab den Pfad auch so im Explorer eingegeben und wurde nach Benutzer und Passwort gefragt obwohl in den Rechten der Freigabe "Jeder" eingestellt ist.

  • Das war auch meine Vermutung, da der lokale Admin bei uns ohne Authentifizierung nicht auf Netzwerklaufwerke zugreifen darf.
    Also habe ich die beiden Dateien jetzt mal nach "C:\Dokumente und Einstellungen\@UserName" kopiert und sie vom User lokal ausführen lassen - leider mit dem gleichen Ergebnis. :(
    Ich muss noch dazu sagen, dass User bei uns keine Schreibrechte auf C:\ haben, daher auch die Dateien unter "C:\Dokumente und Einstellungen\@UserName". Durch die korrekte Ausführung von "RunAs" sollte dann jedoch eine Installation möglich sein, aber es tut sich leider nichts. :(

    Ich habe das kleine Script mittlerweile einige dutzend Male geändert und derzeit sieht's so aus:

    Code
    Local $UserName = "sa_test"
    Local $Password = "TestPasswort"
    Local $programm = "flashplayer.exe"
    Local $workingdir = "C:\Dokumente und Einstellungen\" & @UserName
    
    
    RunAs($UserName, "MeineDomain", $Password, 0, $workingdir, @ScriptDir & $programm, @SW_MAXIMIZE)

    Mit obigen Zeilen pasiert inzwischen gar nichts mehr. Das Script scheint erst gar nicht ausgeführt zu werden.
    Füge ich noch "MsgBox(0,"Fehlermeldung",@error)" ein, um zu sehen welcher Fehler auftritt, bekomme ich den Fehler "0" zurückgeliefert. Hier steht in der Hilfe halt auch nur:

    Zitat


    Return Value

    Success: The PID of the process that was launched.
    Failure: Returns 0 and sets @error to non-zero.

  • [autoit]

    Local $UserName = "sa_test"
    Local $Password = "TestPasswort"
    Local $programm = "flashplayer.exe"

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

    $test = RunAs($UserName, @ComputerName, $Password, 0, $programm, @ScriptDir)
    MsgBox(0, $programm, $test)

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Ich denke ich hab's gelöst:

    [autoit]


    Local $UserName = "sa_Test"
    Local $Password = "TestPasswort"
    Local $ScriptDir = "C:\Dokumente und Einstellungen\" & @UserName & "\Installationsdateien\"
    Local $Program = $ScriptDir & "flashplayer.exe"
    Local $workingdir = "\\Server\Public\Install"

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

    DirCreate($ScriptDir)
    MsgBox(0, "Flashplayer-Installation", "Die Installationsdateien werden nun kopiert und anschließend ausgeführt.")
    FileCopy("\\Server\Public\Install\*.*", $ScriptDir, 9)
    RunAs($UserName, "MeineDomain", $Password, 0, $Program, $workingdir)

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

    ;Fenster schließen
    winwait("Adobe Flash Player ActiveX Installation: Fertig")
    ControlShow ("Adobe Flash Player ActiveX Installation: Fertig", "&Beenden","Button2")
    ControlClick ("Adobe Flash Player ActiveX Installation: Fertig", "&Beenden","Button2")

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

    MsgBox(0,"Installationsabschluss", "Die Installation wurde beendet und alle lokalen, temporären Dateien gelöscht.")
    DirRemove($ScriptDir, 1)

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

    FileChangeDir("\\Server\Public\")
    DirRemove($workingdir,1)

    [/autoit]

    Das Script läuft nun problemlos durch und tut was es soll. :)
    Jetzt hätte ich abschließend noch gerne, dass es den Installationsordner auf dem Server löscht, aber das wird vermutlich nicht gehen, weil das Script sich ja noch selbst ausführt, um dies zu tun und sich somit nicht selbst löschen kann.

    Oder weiß vielleicht jemand noch 'ne Lösung hierzu ?
    Im Zweifelsfall der Aufruf einer weiteren Datei, die das Verzeichnis dann löscht ?!

  • ja ich ^^

    machst ne batch datei mit folgendem inhalt:

    Code
    ping 127.0.0.1 -n 5
    del script.exe
    del batch.bat

    wobei script.exe durch dein scriptnamen(compiliert) geändert werden muss und batch.bat durch den namen deines bats.
    in der letzten scriptzeile deines autoit scriptes führst du die bat aus, danach Exit

    der batch wartet 5 sec dann löscht er das script und danach den batch selber ^^

    mfg

  • Danke, so etwas dachte ich mir auch. :)
    Nachteil hier ist nur, dass das Batch-File danach ja nicht mehr verwendet werden kann.
    Ich denke ich erstelle eine weitere EXE in einem frei zugänglichen Verzeichnis und rufe diese aus meinem Script auf.
    Das erste Script wird nach dem Aufruf ja beendet und das zweite, das "Löschen-Script" löscht dann einfach das erste Script sowie die Installationsdateien und das Verzeichnis.

  • nö mach das so
    per FileInstall
    beim ausführen wird die batch in das verzeichnis kopiert ;)
    ist doch einfacher *g*