kompiliertes Autoit Script mit #require Admin aber im Usercontext starten

  • Hallo Gemeinde,

    ich glaube ich sehe den Wald vor lauter Bäumen nicht: Ich starte mein Programm mit #requireAdmin da es für einige Funktionen Admin-Rechte benötigt.
    Dadurch läuft das Proggi aber auch im UserContext des Adminaccounts, der aber kein Zugriff auf die (Netz-)Laufwerke des aufrufenden Users hat.

    Gibt es die Möglichkeit das Proggi trotz #requireAdmin, im Context des aufrufenden Users laufen zu lassen, damit ich die Netzlaufwerke desselben benutzen kann?

  • Du könntest auch die entsprechenden Teile in ein eigenes Programm auslagern und dann mit entsprechenden Rechten bzw. als entsprechender User starten.

    Ob das möglich ist, ergibt sich jedoch aus deinem Programm.

  • Eine dynamische Anpassung des Sicherheitskontexts (Admin/User) ist meines Wissens nach leider nicht möglich. Dies geht nur durch Starten eines neuen Prozesses, siehe dazu auch das Codebeispiel zu _Security__CreateProcessWithToken oder die folgende Diskussion: UAC Elevate and DeElevate Scripts.

    Dementsprechend sind mindestens zwei Prozesse nötig, daher ist die Vorgehensweise von Moombas sinnvoll. Ein ganz einfaches Beispiel sähe so aus:

    Der Nachteil dieser Methode ist, dass für jede Admin-Aktion die UAC-Abfrage erneut angezeigt wird, da ein neuer Prozess gestartet wird. Das kann ganz schön nervig werden.

    Je nach deinem konkreten Anwendungsfall kann es daher mehr Sinn ergeben, auf eines von meinen oben verlinkten Beispielen zurückzugreifen. Alternativ könnte man auch das Admin-Skript nur einmal starten und dann über Interprozesskommunikation die auszuführenden Aktionen übermitteln.

  • Alternativ könnte man auch das Admin-Skript nur einmal starten und dann über Interprozesskommunikation die auszuführenden Aktionen übermitteln.


    Genau so würd ich das machen. ;)

    User Programm ohne Privilegien startet automatisch einen Admin Prozess, welcher unsichtbar im Hintergrund auf Befehle des User Programms wartet. Eine UAC Abfrage und fertig.