Impedisci elevazione (UAC) per un'applicazione che non ne ha bisogno [duplicato]


34

Dopo aver recentemente migrato da Vista 32 bit a Windows 7 64 bit, uno dei miei programmi ora richiede i diritti di amministratore.

Uso un editor di testo piuttosto esotico (Crimson Editor). Sebbene non progettato per Vist / Win7, ha funzionato bene con Vista. Ma in Windows 7, l'eseguibile del programma ottiene questo scudo UAC aggiunto alla sua icona (anche se il flag "Esegui come amministratore" nella scheda compatibilità non è impostato) e richiede l'elevazione ogni volta che lo eseguo.

In che modo Win7 determina che questa applicazione simile a un blocco note necessita dei diritti di amministratore? Come posso ignorare questa falsa euristica?

Risposte:


22

No, il motivo per cui Crimson Editor fa questo NON è perché non è firmato. (E questo non è nuovo per Win7). È perché specifica il manifest dell'applicazione, che è incorporato in fase di compilazione, specifica requestedPrivilegeLevel="highestLevel".

Secondo questo post del forum , gli sviluppatori di Crimson Editor hanno cambiato questo nella revisione 237-241. Lo hanno fatto perché la funzione "Aggiungi Crimson Editor ai menu di scelta rapida della shell" richiede i privilegi di amministratore.

La correzione a lungo termine sarebbe che gli sviluppatori di Crimson Editor correggessero il loro manifest di applicazione. Dovrebbero aggiungersi ai menu di scelta rapida della shell durante l'installazione, o almeno dire agli utenti che devono eseguire manualmente l'app elevata (che è facile da fare) invece di richiederla.

Per tutte le app con requestedPrivilegeLevel="highestLevel"nel loro manifest (utilizzare Manifest View per visualizzare i manifest di applicazioni), è possibile utilizzare Microsoft Application Compatibility Toolkit per evitare l'applicazione con la correzione RunAsInvoker, che forza l'esecuzione dell'app con i token utente standard.

Per ulteriori informazioni su come utilizzare Application Compatibility Toolkit, vedere questo post su come applicarlo a Crimson Editor o istruzioni generali .


1
In alternativa, è possibile sostituire il manifest esistente utilizzando lo strumento mt.exe della riga di comando che è possibile ottenere gratuitamente con Visual Studio Express (longwind ma ne vale la pena se si colpisce molto questo problema). Nota che la sostituzione del manifest incorporato cambierà il file .exe quindi a) assicurati di averne una copia nel caso in cui tu rompa delle cose eb) se è stato firmato romperai la firma (ma sembra in questo caso che tu abbia già determinato che non è firmato comunque).
AdamV,

the.d.stro, sei un vero toccasana, funziona alla grande.
phloopy

1
+1 per "correggere la loro applicazione" e l'utilizzo del toolkit AppCompat per correggere i loro bug.
Ian Boyd,

13

Ho scoperto che avevo due applicazioni con questo problema. Uno aveva "aggiorna" nel nome del file e l'altro aveva "aggiorna" in "FileDecsription". Ho semplicemente rimosso la parola "aggiornamento" da queste due applicazioni e non più avvisi UAC. Ho trovato le informazioni in "Come funziona UAC" - "Rilevamento installatore" su:

http://msdn.microsoft.com/en-us/library/aa905330.aspx

Che afferma quanto segue:

Il rilevamento dell'installatore si applica solo a:

  • File eseguibili a 32 bit
  • Applicazioni senza un livello di esecuzione richiesto
  • Processi interattivi in ​​esecuzione come utente standard con UAC abilitato

Prima di creare un processo a 32 bit, vengono controllati i seguenti attributi per determinare se si tratta di un programma di installazione:

  • Il nome file include parole chiave come "installa", "installazione" e "aggiorna".
  • Parole chiave nei seguenti campi delle risorse di controllo delle versioni: fornitore, nome azienda, nome prodotto, descrizione file, nome file originale, nome interno e nome esportazione.
  • Le parole chiave nell'applicazione side-by-side si manifestano nell'eseguibile.
  • Parole chiave in voci StringTable specifiche collegate nell'eseguibile.
  • Attributi chiave nei dati del file di risorse collegati nell'eseguibile.
  • Sequenze mirate di byte all'interno dell'eseguibile.

  • Nota: le parole chiave e le sequenze di byte sono state derivate da caratteristiche comuni osservate da varie tecnologie di installazione.


7

Se si dispone di Visual Studio, è possibile effettuare le seguenti operazioni:

  1. Apri Visual Studio come amministratore.
  2. Premi Ctrl-O per aprire un file
  3. Passare alla cartella in cui si trova Crimson Editor e aprire cedt.exe
  4. Il file viene aperto utilizzando l'editor delle risorse e vedrai un albero con un ramo chiamato RT_MANIFEST, espandi questo e fai doppio clic sulla singola voce figlio denominata "1 [English United States]"
  5. Circa tre quarti di discesa nella colonna di destra vedrai il livello richiestoExecutionLevel = "maximumAvailable", cambia "mostAvailable" in "asInvoker" (NB l'editor si apre in modalità over-type per impostazione predefinita.
  6. Salva il file e il gioco è fatto.

HTH

Kevan


4

Ci sono alcune informazioni sull'euristica qui: http://msdn.microsoft.com/en-us/library/aa905330.aspx

Un manifest può aiutare a controllare alcune di queste cose.


MSDN parla di "incorporare" il manifest. Non è stato fatto durante la compilazione del programma? Devo compilare Crimson Editor da solo per ottenere un tale manifest?
Sealed Dom

5
È possibile aggiungere un file filename.exe.manifest nella stessa cartella e Windows lo leggerà in modo appropriato.
Factor Mystic,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.