7

Recentemente, stavo cercando di dare i miei diritti di amministratore dell'applicazione senza sistema chiedendo "Vuoi dare i diritti di amministratore?" e ho trovato un modo che funziona perfettamente.Cosa fa effettivamente "__COMPAT_LAYER"?

soluzione che ho trovato

ho creato un file bat chiamato nonadmin.bat e ho scritto il codice qui sotto in esso

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

e se ci trasciniamo qualsiasi exe su di esso, dà loro i diritti di amministratore (prima non mi permetteva di accedere alle variabili d'ambiente senza di esso ma dopo aver dragedato il file su bat funzionava).

Domanda

Ora la mia domanda è: -

  1. quello che in realtà significa '__COMPAT_LAYER' e che cosa fa?
  2. Come rimuovere una cosa simile in modo che richieda nuovamente i diritti di amministratore?
  3. Ciò riduce la sicurezza del sistema?
+0

Fa ciò che dice. Imposta le opzioni di compatibilità. I tuoi esempi funzioneranno solo per gli amministratori. I non amministratori avranno errore. –

+0

@Noodles puoi per favore elaborare e spiegare la risposta di queste 3 domande. –

+4

Presumibilmente dovrebbe leggere 'cmd/min/c ...'? – TripeHound

risposta

14

__COMPAT_LAYER, e come usarlo
__COMPAT_LAYER è una variabile di ambiente di sistema che consente di impostare livelli di compatibilità, che sono le impostazioni è possibile regolare quando si fa clic su un file eseguibile, selezionare Proprietà, e vai alla scheda Compatibilità.

Imgur

ci sono several options to choose from in aggiunta a quello che conosci:

  • 256color - Viene eseguito in 256 colori
  • 640x480 - viene eseguito in risoluzione 640x480 dello schermo
  • DisableThemes - Disattiva i temi visivi
  • Win95 - Esegue il programma in modalità compatibilità per Windows 95
  • Win98 - Esegue il programma in modalità compatibilità per Windows 98/ME
  • Win2000 - Esegue il programma in modalità compatibilità per Windows 2000
  • NT4SP5 - Esegue il programma in modalità di compatibilità per Windows NT 4.0 SP5

È possibile utilizzare più opzioni separandole con uno spazio: set __COMPAT_LAYER=Win98 640x480

disinserimento del __COMPAT_LAYER variabile
Queste impostazioni persistono per tutto il tempo esiste la variabile. La variabile smette di esistere quando il prompt dei comandi in cui è stata impostata la variabile viene chiuso o quando la variabile viene disattivata manualmente con il comando set __COMPAT_LAYER=.

Poiché si imposta la variabile tramite script batch, la variabile viene automaticamente disattivata una volta completato l'eseguibile su cui si esegue il trascinamento e lo script viene chiuso. È importante notare che le impostazioni delle variabili persistono in tutti i processi figli generati dall'eseguibile selezionato.

la sicurezza di utilizzo __COMPAT_LAYER
Impostazione __COMPAT_LAYER a RunAsInvoker non effettivamente dare privilegi di amministratore se non li avete; impedisce semplicemente che compaia il pop-up UAC e quindi runs the program as whatever user called it. Pertanto, è sicuro utilizzarlo poiché non ottieni magicamente diritti di amministratore.

È inoltre possibile impostare la variabile su RunAsHighest (attiva solo UAC se si dispone dei diritti di amministratore, ma non concede diritti di amministratore se non li si possiede) o RunAsAdmin (attiva sempre UAC).

+0

Grazie per la spiegazione dettagliata amico mio, ma ho bisogno di sapere 2 cose. 1) Ho letto che è una variabile d'ambiente ma ogni volta che la cerco nelle variabili d'ambiente non c'è nulla di simile. 2) Come hai detto di disinserire, devo scrivere "set __COMPAT_LAYER =" OR "set __COMPAT_LAYER = NULL" ma quando eseguo questi comandi il prompt UAC non riappare. Cosa dovrei fare per farli riapparire? –

+0

Non riesco a replicare il problema, ma come dico nella mia ultima frase, dovresti _should_ dire "set __COMPAT_LAYER = RunAsAdmin' – SomethingDark

+0

@Agent_Spock: alcune variabili d'ambiente esistono di default, alcune esistono solo se le imposti; questo è uno di questi ultimi. Inoltre, se facendo doppio clic sul file eseguibile in questione non viene più visualizzato il prompt UAC, ciò potrebbe indicare che non contiene un manifest che indica a Windows se richiede l'elevazione o meno. Quando ciò accade, Windows fa un'ipotesi. Quindi forse Windows ha notato che è stato eseguito correttamente come non amministratore e ha deciso di seguire la suite. In ogni caso, a meno che non si imposti in modo permanente la variabile d'ambiente nel registro o tramite il pannello di controllo, questa non è la causa. –