Erhöhung (UAC) für eine Anwendung verhindern, die sie nicht benötigt [duplizieren]

34

Nachdem ich kürzlich von Vista 32bit auf Windows 7 64bit migriert habe, benötigt eines meiner Programme jetzt Administratorrechte.

Ich benutze einen ziemlich exotischen Texteditor (Crimson Editor). Obwohl es nicht für Vist / Win7 entwickelt wurde, funktionierte es gut mit Vista. Unter Windows 7 erhält die ausführbare Programmdatei dieses UAC-Schutzschild zu ihrem Symbol hinzugefügt (obwohl das Flag "Als Administrator ausführen" auf der Registerkarte "Kompatibilität" angezeigt wird nicht set) und fordert zur Eingabe der Höhe auf, wenn ich es starte.

Wie stellt Win7 fest, dass diese Notizblock-ähnliche Anwendung Administratorrechte benötigt? Wie kann ich diese falsche Heuristik überschreiben?

SealedSun
quelle

Antworten:

22

Nein, der Grund, warum Crimson Editor dies tut, ist NICHT, weil es nicht signiert ist. (Und das ist nicht neu in Win7). Dies liegt daran, dass das Anwendungsmanifest, das zur Kompilierungszeit eingebettet ist, Folgendes angibt requestedPrivilegeLevel="highestLevel".

Gemäß dieser Forumsbeitrag , die Crimson Editor-Entwickler haben dies in Revision 237-241 geändert. Dies geschah, weil die Funktion "Hochroter Editor zu Shell-Kontextmenüs hinzufügen" Administratorrechte erfordert.

Die langfristige Lösung wäre, dass die Crimson Editor-Entwickler ihr Anwendungsmanifest korrigieren. Sie sollten sich während der Installation selbst zu den Shell-Kontextmenüs hinzufügen oder den Benutzern zumindest mitteilen, dass sie die App manuell mit erhöhten Rechten ausführen müssen (was einfach ist), anstatt sie zu benötigen.

Für alle Apps mit requestedPrivilegeLevel="highestLevel" in ihrem Manifest Manifest-Ansicht Zum Anzeigen von Anwendungsmanifesten können Sie die von Microsoft verwenden Anwendungskompatibilitäts-Toolkit um die Anwendung mit dem Fix RunAsInvoker zu shimen, der die Ausführung der App mit Ihren Standardbenutzertoken erzwingt.

Weitere Informationen zur Verwendung des Application Compatibility Toolkit finden Sie unter dieser Beitrag über die Anwendung auf Crimson Editor, oder Allgemeine Anweisungen .

the.d.stro
quelle
1
Alternativ können Sie das vorhandene Manifest mit dem Befehlszeilenprogramm mt.exe ersetzen, das Sie mit Visual Studio Express kostenlos herunterladen können (langwierig, aber es lohnt sich, wenn Sie dieses Problem häufig haben). Beachten Sie, dass durch das Ersetzen des eingebetteten Manifests die EXE-Datei geändert wird. A) Vergewissern Sie sich, dass Sie eine Kopie davon haben, falls Sie etwas kaputtmachen bereits festgestellt, dass es sowieso nicht signiert ist).
AdamV
the.d.stro, du bist ein Lebensretter, es funktioniert großartig.
phloopy
1
+1 für "korrigieren ihre Anwendung" und Verwenden des AppCompat-Toolkits, um ihre Fehler für sie zu beheben.
Ian Boyd
13

Ich fand, dass ich zwei Anwendungen hatte, die dieses Problem hatten. Einer hatte 'update' im Dateinamen und der andere 'update' in der 'FileDecsription'. Ich habe einfach das Wort "Update" aus diesen beiden Anwendungen entfernt und keine UAC-Warnungen mehr. Ich fand die Informationen unter "Funktionsweise von UAC" - "Installer Detection" unter:

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

Welche besagt Folgendes:

Die Installer-Erkennung gilt nur für:

  • 32 Bit ausführbare Dateien
  • Anwendungen ohne angeforderte Ausführungsebene
  • Interaktive Prozesse, die als Standardbenutzer mit aktivierter Benutzerkontensteuerung ausgeführt werden

Bevor ein 32-Bit-Prozess erstellt wird, gelten die folgenden Attribute   überprüft, um festzustellen, ob es sich um ein Installationsprogramm handelt:

  • Der Dateiname enthält Schlüsselwörter wie "install", "setup" und "update".
  • Schlüsselwörter in den folgenden Feldern der Versionierungsressource: Hersteller, Firmenname, Produktname, Dateibeschreibung, Originaldateiname,   Interner Name und Exportname.
  • Schlüsselwörter im Side-by-Side-Anwendungsmanifest sind in die ausführbare Datei eingebettet.
  • Schlüsselwörter in bestimmten StringTable-Einträgen, die in der ausführbaren Datei verlinkt sind.
  • Schlüsselattribute in den in der ausführbaren Datei verknüpften Ressourcendateidaten.
  • Zielsequenzen von Bytes innerhalb der ausführbaren Datei.

  • Anmerkung: Die Schlüsselwörter und Folgen von Bytes wurden aus gemeinsamen Merkmalen abgeleitet, die von verschiedenen Installer-Technologien beobachtet wurden.

TheBeauty
quelle
7

Wenn Sie Visual Studio haben, können Sie Folgendes tun:

  1. Öffnen Sie Visual Studio als Administrator.
  2. Drücken Sie Strg-O, um eine Datei zu öffnen
  3. Navigieren Sie zu dem Ordner, in dem sich Crimson Editor befindet, und öffnen Sie cedt.exe
  4. Die Datei wird mit dem Ressourcen-Editor geöffnet. Sie sehen einen Baum mit einem Zweig namens RT_MANIFEST. Erweitern Sie diesen und doppelklicken Sie auf den einzelnen untergeordneten Eintrag namens "1 [English United States]".
  5. Ungefähr drei Viertel des Weges in der rechten Spalte sehen Sie requiredExecutionLevel level = "highestAvailable", ändern Sie "highestAvailable" in "asInvoker" (Hinweis: Der Editor wird standardmäßig im Überschreibmodus geöffnet.
  6. Speichern Sie die Datei und Sie sind fertig.

HTH

Kevan

kevanb
quelle
4

Hier gibt es einige Informationen zur Heuristik: http://msdn.microsoft.com/en-us/library/aa905330.aspx

Ein Manifest kann dabei helfen, einige dieser Dinge zu kontrollieren.

AaronLS
quelle
MSDN spricht über das "Einbetten" des Manifests. Wird das nicht beim Kompilieren des Programms gemacht? Muss ich Crimson Editor selbst kompilieren, um ein solches Manifest zu erhalten?
SealedSun
5
Sie können eine Datei filename.exe.manifest im selben Ordner hinzufügen, und Windows liest sie entsprechend.
Factor Mystic