7

Kürzlich habe ich versucht, meine Anwendung Administratorrechte ohne System fragen nach "Möchten Sie Administratorrechte geben?" und ich fand einen Weg, der perfekt funktioniert.Was macht "__COMPAT_LAYER" eigentlich?

Lösung I Gefunden

ich eine Fledermaus-Datei darin

cmd min C set __COMPAT_LAYER=RunAsInvoker && start %1 

und wenn wir nonadmin.bat und schrieb den unter dem Codenamen erstellt ziehen Sie einen beliebigen exe auf sie es gibt ihnen Administratorrechte (bevor es mir nicht erlaubt hat, auf Umgebungsvariablen zuzugreifen, aber nachdem ich die Datei ausgepackt habe, hat es funktioniert).

Frage

Nun meine Frage: -

  1. Was eigentlich bedeutet '__COMPAT_LAYER' und was tut sie?
  2. Wie entferne ich so etwas, so dass es erneut nach Administratorrechten fragt?
  3. Verringert dies die Systemsicherheit?
+0

Es tut was sagt. Stellt Kompatibilitätsoptionen ein. Ihre Beispiele funktionieren nur für Administratoren. Nicht Admins werden Fehler. –

+0

@Noodles können Sie bitte die Antwort dieser 3 Fragen erarbeiten und erklären. –

+4

Vermutlich sollte das 'cmd/min/c ...' heißen? – TripeHound

Antwort

14

__COMPAT_LAYER, und wie es zu benutzen
__COMPAT_LAYER ist eine Systemumgebungsvariable, die Sie Kompatibilitätsschichten festlegen können, die die Einstellungen Sie anpassen können, wenn Sie auf eine ausführbare Datei der rechten Maustaste, wählen Sie Eigenschaften, und wechseln Sie zur Registerkarte Kompatibilität.

Imgur

Es gibt several options to choose from zusätzlich zu dem von Ihnen wissen:

  • 256color - Läuft in 256 Farben
  • 640x480 - Läuft in 640x480 Bildschirmauflösung
  • DisableThemes - Deaktiviert visuelle Designs
  • Win95 - Führt das Programm im Kompatibilitätsmodus für Windows 95
  • Win98 - Führt das Programm im Kompatibilitätsmodus für Windows 98/ME
  • Win2000 - Führt das Programm im Kompatibilitätsmodus für Windows 2000
  • NT4SP5 - Führt das Programm im Kompatibilitätsmodus für Windows NT 4 aus.0 SP5

Sie können mehrere Optionen verwenden, indem man sie mit einem Leerzeichen zu trennen: set __COMPAT_LAYER=Win98 640x480

Entschärfen der __COMPAT_LAYER Variable
Diese Einstellungen für ändern, solange die Variable existiert. Die Variable wird nicht mehr ausgeführt, wenn die Eingabeaufforderung, in der die Variable festgelegt wurde, geschlossen ist oder wenn die Variable manuell mit dem Befehl set __COMPAT_LAYER= deaktiviert wird.

Da Sie die Variable über Stapelscript festlegen, wird die Variable automatisch deaktiviert, sobald die ausführbare Datei, auf die Sie ziehen, abgeschlossen ist und das Skript geschlossen wird. Es ist wichtig zu beachten, dass die Variableneinstellungen für alle untergeordneten Prozesse beibehalten werden, die von der ausgewählten ausführbaren Datei erzeugt werden.

Die Sicherheit von __COMPAT_LAYER Mit
Einstellung __COMPAT_LAYER zu RunAsInvoker nicht nicht wirklich Administratorrechte geben, wenn Sie sie nicht haben; Es verhindert einfach, dass das UAC-Popup erscheint und dann runs the program as whatever user called it. Daher ist es sicher, dies zu verwenden, da Sie keine magischen Administratorrechte erhalten.

Sie können die Variable auch auf RunAsHighest setzen (löst nur die Benutzerkontensteuerung aus, wenn Sie über Administratorrechte verfügen, erteilt jedoch keine Administratorrechte, wenn Sie sie nicht haben) oder RunAsAdmin (löst immer Benutzerkontensteuerung aus).

+0

Vielen Dank für die ausführliche Erklärung mein Freund, aber ich muss 2 Dinge wissen. 1) Ich habe gelesen, dass es eine Umgebungsvariable ist, aber wenn ich in den Umgebungsvariablen danach suche, gibt es dort keine solche Sache. 2) Wie Sie gesagt haben, um es zu deaktivieren, muss ich schreiben "set __COMPAT_LAYER =" ODER "set __COMPAT_LAYER = NULL", aber wenn ich diese Befehle ausführen, wird die UAC-Eingabeaufforderung nicht wieder angezeigt. Was soll ich tun, damit sie wieder erscheinen? –

+0

Ich bin nicht in der Lage, Ihr Problem zu replizieren, aber wie ich in meinem letzten Satz sage, _So sollte _ sagen können: set __COMPAT_LAYER = RunAsAdmin' – SomethingDark

+0

@Agent_Spock: einige Umgebungsvariablen existieren standardmäßig, einige existieren nur, wenn Sie sie setzen; Dies ist einer der letzteren. Wenn die fragliche ausführbare Datei durch Doppelklicken nicht mehr die UAC-Eingabeaufforderung anzeigt, weist dies möglicherweise darauf hin, dass sie kein Manifest enthält, das Windows mitteilt, ob eine Erhöhung erforderlich ist oder nicht. Wenn das passiert, macht Windows eine Vermutung. Vielleicht hat Windows bemerkt, dass Sie es erfolgreich als Nicht-Administrator ausgeführt haben und entschieden, Suite zu folgen. Wenn Sie die Umgebungsvariable nicht dauerhaft in der Registrierung oder über das Control Panel festlegen, ist das jedenfalls nicht die Ursache. –