Software ohne UAC-Dialog installieren

Eine Umgebungsvariable, ein Batch-Skript und Schluss mit nervigen UAC-Pop-ups.

Software ohne UAC-Dialog installieren

Jeder kennt es: Man möchte nur schnell eine kleine Anwendung installieren und schon meldet sich Windows mit der Benutzerkontensteuerung (UAC), fordert eine Bestätigung und verdunkelt den gesamten Bildschirm. Obwohl dieser Mechanismus ein wichtiger Schutz vor ungewollten Systemänderungen ist, kann er in bestimmten Situationen als störend empfunden werden. Es existiert jedoch ein eleganter Weg, diese Abfrage für bestimmte Fälle zu umgehen, ohne die Systemsicherheit komplett auszuhebeln, denn nicht für jede Systemänderung sind Admin-Rechte erforderlich. Manche Programme z.B. lassen sich auch nur für den gerade angemeldeten User installieren.

Wozu die Benutzerkontensteuerung (UAC) überhaupt gut ist

Bevor man einen Schutzmechanismus umgeht, sollte man dessen Zweck verstehen. Die Benutzerkontensteuerung wurde mit Windows Vista eingeführt, um das "Least-Privilege-Prinzip" besser durchzusetzen. Selbst wenn ein Benutzer mit Administratorrechten angemeldet ist, werden Programme standardmäßig nur mit normalen Benutzerrechten gestartet. Fordert eine Anwendung höhere Rechte an, um beispielsweise in Systemverzeichnisse zu schreiben oder wichtige Registry-Einträge zu ändern, greift die UAC ein und fragt beim Benutzer nach einer expliziten Genehmigung. Dies verhindert, dass Schadsoftware oder unbedachte Aktionen unbemerkt tiefgreifende und potenziell gefährliche Änderungen am System vornehmen können.

Der RunAsInvoker-Trick: UAC elegant umschiffen

Hier kommt eine wenig bekannte, aber sehr mächtige Umgebungsvariable ins Spiel: __COMPAT_LAYER. Diese Variable dient dazu, einer Anwendung bestimmte Kompatibilitätseinstellungen aufzuzwingen, so als hätte man sie manuell in den Dateieigenschaften konfiguriert. Für unser Vorhaben ist der Wert RunAsInvoker entscheidend.

Setzt man __COMPAT_LAYER auf RunAsInvoker, weist man das Betriebssystem an, die Anfrage der Anwendung auf höhere Rechte (elevation request) schlicht zu ignorieren. Die Anwendung wird gezwungen, im Sicherheitskontext des aufrufenden Prozesses (des "Invokers") zu starten – also mit den Rechten des Skripts oder des Benutzers, der sie ausführt. Es findet kein Versuch statt, die Rechte zu erhöhen, und folglich erscheint auch keine UAC-Abfrage. Man kann es sich wie einen Türsteher vorstellen, dem man sagt: "Dieser Gast bleibt im normalen Bereich, er braucht keinen VIP-Zugang" – der Türsteher nickt und lässt ihn ohne weitere Prüfung passieren.

In der Praxis: Die Batch-Datei zur UAC-Umgehung

Die Umsetzung ist denkbar einfach und erfolgt über eine simple Batch-Datei. Diese Methode ist ideal, um beispielsweise Software-Installationen zu skripten, die von Haus aus keine Administratorrechte benötigen.

@echo off
::
:: UAC-Bypass-Skript mit RunAsInvoker
:: M. Meister
::
:: Dieser Befehl unterdrueckt die Ausgabe der Befehle im Konsolenfenster.
:: Quasi der "Sei still und arbeite"-Modus.
@echo off

:: Das ist der magische Teil: Wir setzen die Kompatibilitaetsebene.
:: Jede nachfolgend in dieser Shell gestartete Anwendung wird angewiesen,
:: die UAC-Abfrage zu ueberspringen und mit den Rechten des Aufrufers zu starten.
set "__COMPAT_LAYER=RunAsInvoker"

:: Nun starten wir die eigentliche Installationsdatei.
:: Der erste leere String "" ist fuer den Fenstertitel, den wir nicht brauchen.
:: WICHTIG: Den Pfad zur .exe-Datei anpassen! 
start "" "SteamSetup.exe"

Speichert man diesen Code in einer Datei mit der Endung .bat und führt sie aus, startet die angegebene .exe-Datei, ohne dass der UAC-Dialog erscheint. Die Umgebungsvariable __COMPAT_LAYER wird dabei nur für die Dauer der Ausführung des Skripts gesetzt und verfällt, sobald sich das Konsolenfenster schließt.

Wann der Trick versagt

Es ist essenziell zu verstehen, dass dies kein Allheilmittel ist. Der RunAsInvoker-Trick funktioniert nur, wenn die zu installierende Anwendung nicht zwingend Administratorrechte benötigt.

Versucht eine so gestartete Anwendung, Aktionen auszuführen, für die erhöhte Rechte unerlässlich sind, wird sie scheitern. Typische Beispiele hierfür sind:

  • Schreiben in systemgeschützte Verzeichnisse wie C:\Programme oder C:\Windows.
  • Ändern von systemweiten Registry-Schlüsseln unter HKEY_LOCAL_MACHINE.
  • Installieren von Systemdiensten oder Treibern.

In solchen Fällen wird die Installation mit einer Fehlermeldung abbrechen oder unvollständig ausgeführt, da der Anwendung der Zugriff verweigert wird.

Sinnvoll ist diese Methode daher vor allem für Anwendungen, die sich in das Benutzerprofil installieren (z.B. in %LOCALAPPDATA%), was bei moderner Software wie Visual Studio Code, Google Chrome oder vielen anderen Tools der Fall ist, die auch eine "per-user" Installation anbieten.

Wenn es doch Admin-Rechte sein müssen

Für Szenarien, in denen Administratorrechte für eine automatisierte Aufgabe unverzichtbar sind, gibt es robustere Methoden. Die Windows-Aufgabenplanung (taskschd.msc) erlaubt das Erstellen von Aufgaben, die von vornherein mit den höchsten Rechten konfiguriert werden. Einmal eingerichtet, kann eine solche Aufgabe manuell oder durch ein Skript ohne erneute UAC-Abfrage gestartet werden.

Fazit

Die Verwendung von set __COMPAT_LAYER=RunAsInvoker in einer Batch-Datei ist ein cleverer und effektiver Kniff, um UAC-Dialoge bei der Installation von benutzerbasierter Software zu unterdrücken. Sie ist ein nützliches Werkzeug im Arsenal jedes Administrators und Power-Users, solange man sich ihrer klaren Einschränkungen bewusst ist. Für alles, was tiefere Systemeingriffe erfordert, bleiben etablierte Methoden wie die Aufgabenplanung der korrekte und empfohlene Weg.