ShellExecuteAs???

  • Moin,

    es gibt ja leider keinen ShellExecuteAs wie RunAs Befehl!

    Leider braucht man zum Ausführen vieler Setups unter Windows 7 den ShellExecute Befehl... sonst passiert nichts!

    Gibt es irgend eine Möglichkeit mit ShellExecute eine Datei als bestimmten Benutzer aufzurufen... also wie bei RunAs?

    Das geht nicht:

    Code
    RunAs("Admin", @LogonDomain, "Passwort", 0, ShellExecute("\File.exe"), @SystemDir)

    Er führt es zwar aus aber nicht als erforderlichen Benutzer!

    Jemand einen Tipp?

    7 Mal editiert, zuletzt von raynor2k (12. November 2010 um 10:08)

  • Tach,

    hab mich leider erst jetzt wieder damit beschäftigt! Es funktioniert aber leider nicht mit dieser Lösung! Problem dabei ist aber wahrscheinlich, dass ich nach Shellexecute nicht den Pfad der Installationsdatei angebe sondern eine Variable die dann auf den jeweiligen Pfad hinweist?

    Hab probiert:

    Code
    RunAs("Admin", @LogonDomain, "Passwort", 0,  @AutoItExe & ' /AutoIt3ExecuteLine "ShellExecute($commands[$i]) " ', @SystemDir)

    In Fehlermeldung schreibt er dann eben: Variable used without being declared!

    Es muss aber mit der Variable so auch funktionieren. Ich kann nicht den kompletten Pfad angeben!

    Hat noch jemand einen Tipp?

  • Anstatt

    [autoit]

    @AutoItExe & ' /AutoIt3ExecuteLine "ShellExecute($commands[$i]) " '

    [/autoit]


    muss dort der Pfad des Programmes hin.

    Vergess was ich gesagt habe.

    [autoit]

    RunAs("Admin", @LogonDomain, "Passwort", 0, @AutoItExe & ' /AutoIt3ExecuteLine "ShellExecute(' & $commands[$i] & ') " ', @SystemDir)

    [/autoit]
  • Hab jetzt noch ausprobiert:

    Code
    RunAs("Admin", @LogonDomain, "Passwort", 0,  @AutoItExe & ' /AutoIt3ExecuteLine "ShellExecute(" ' & $commands[$i] & ' ") " ', @SystemDir)

    Jetzt erkennter schon mal den richtgen Pfad aber zeigt Error:

    Missing separator character after keyword!

  • Und so?

    [autoit]

    RunAs("Admin", @LogonDomain, "Passwort", 0, @AutoItExe & ' /AutoIt3ExecuteLine "ShellExecute(''' & $commands[$i] & ''')"', @SystemDir)

    [/autoit]
  • NICE!!! Danke das funktioniert... Ich mach noch ein paar Tests aber denk das wars! Kannst du mir vielleicht noch kurz erklären, warum man da 3x das hochkommer vorher und danach braucht?

  • Es wird ein String denk ich mal erwartet der die Hochkommas enthält, da dies ein String kennzeichnet. Wenn ich falsch liege, bitte korrigieren.

  • Wie ja schon geschrieben funktioniert das:

    Code
    RunAs("Admin", @LogonDomain, "Passwort", 0,  @AutoItExe & ' /AutoIt3ExecuteLine "ShellExecute(''' & $commands[$i] & ''')"', @SystemDir)

    Es wäre allerdings cool wenn man den Wait-Befehl noch irgendwie einbauen kann, da er ansonsten alle marikierten nach der Reihe gleich ausführt ohne zu warten bis der eine Prozess beendet ist.

    Hier mit RunAsWait am Anfang bringt es nichts, da es ja nur die Benutzerrechte angibt und dann ist es für ihn schon erledigt!

    Bei ShellExecute noch ein Wait dran bringt auch nix weil er ja denk ich mit diesem @AutoItExe es irgendwie extern ausführt!

    Mit ProcessWaitClose komme ich auch nicht weit, da ich keine PID rausbekommen. Zur Info fürs RunAs am Anfang gibt es schon eine PID aber die ist ja dann gleich wieder weg weil es sich ja nur um die Übergabe der Benutzerdaten handelt. Ja und die PID vom ShellExecute ... an die komme ich nicht ran bzw. glaub ich das mit Shellexecute auch keine PID rauszufinden ist!

    Einfach die EXE in ProcessWaitClose kann ich nicht angeben, da die auszuführende Datei über eine Variable läuft in der der ganze Pfad angegeben ist.

    Viel Text ich weiß... aber vielleicht hat jemand eine Idee...

    Danke schon mal!

  • Habs jetzt gelöst damit es mit er wartet bis die Installation abeschlossen ist zur Info:

    Code
    Local $PosProgWin7 = StringInStr($commands[$i], "\", 0, -1) ;Position von Start des Programmnamens
    Local $ProgWin7 = StringMid($commands[$i], $PosProgWin7+1) ;Kompletter Prozessname
    RunAs("Admin", @LogonDomain, "Passwort", 0,  @AutoItExe & ' /AutoIt3ExecuteLine "ShellExecute(''' & $commands[$i] & ''')"', @SystemDir)
    Sleep(5000)
    ProcessWaitClose($ProgWin7)