Verhindern Sie die Erhöhung (UAC) für eine Anwendung, die sie nicht benötigt

27887
SealedSun

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

Ich verwende einen eher exotischen Texteditor (Crimson Editor). Obwohl nicht für Vist / Win7 entwickelt, funktionierte es gut mit Vista. Unter Windows 7 erhält die ausführbare Programmdatei dieses UAC-Schild jedoch zu ihrem Symbol (obwohl das Flag "Als Administrator ausführen" auf der Registerkarte "Kompatibilität" nicht gesetzt ist) und fragt bei jeder Ausführung nach einer Erhöhung.

Wie stellt Win7 fest, dass diese Notizblockanwendung Administratorrechte benötigt? Wie kann ich diese falsche Heuristik überschreiben?

34

4 Antworten auf die Frage

22
the.d.stro

Nein, der Crimson Editor macht das NICHT, weil er nicht signiert ist. (Und das ist nicht neu in Win7). Dies liegt daran, dass das Anwendungsmanifest, das zur Kompilierzeit eingebettet ist, angibt requestedPrivilegeLevel="highestLevel".

Laut diesem Forenbeitrag haben die Entwickler des Crimson Editors dies in der Revision 237-241 geändert. Sie haben dies getan, weil für die Funktion "Crimson-Editor zu Shell-Kontextmenüs hinzufügen" Administratorrechte erforderlich sind.

Die langfristige Lösung wäre, dass die Entwickler des Crimson Editors ihr Anwendungsmanifest korrigieren. Sie sollten sich während der Installation den Shell-Kontextmenüs hinzufügen oder den Benutzern zumindest mitteilen, dass sie die App manuell ausführen müssen (was leicht zu bewerkstelligen ist), anstatt sie zu erfordern.

Bei allen Apps mit requestedPrivilegeLevel="highestLevel"ihrem Manifest ( Manifestansicht zum Anzeigen von Anwendungsmanifesten) können Sie das Anwendungskompatibilitäts-Toolkit von Microsoft verwenden, um die Anwendung mit dem Fix RunAsInvoker auszurichten, der die Ausführung der App mit Ihren Standardbenutzertoken erzwingt.

Weitere Informationen zur Verwendung des Application Compatibility Toolkit finden Sie in diesem Beitrag zum Anwenden von Crimson Editor oder allgemeinen Anweisungen .

Alternativ können Sie das vorhandene Manifest mit dem Befehlszeilentool mt.exe ersetzen, das Sie mit Visual Studio Express kostenlos erhalten können (langwierig, aber es lohnt sich, wenn Sie dieses Problem häufig treffen). Beachten Sie, dass durch das Ersetzen des eingebetteten Manifests die EXE-Datei geändert wird. Stellen Sie daher sicher, dass Sie über eine Kopie verfügen, falls Sie Dinge kaputt machen, und b) falls es signiert wurde, die Signatur gebrochen wird bereits festgestellt, dass es sowieso nicht signiert ist). AdamV vor 14 Jahren 1
the.d.stro, du bist ein Lebensretter, es funktioniert großartig. phloopy vor 14 Jahren 0
+1 für * "Ihre Anwendung korrigieren" * und mithilfe des AppCompat-Toolkits ihre Fehler beheben. Ian Boyd vor 11 Jahren 1
13
TheBeauty

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

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

Welches besagt folgendes:

Installer Detection gilt nur für:

  • 32-Bit-ausführbare Dateien
  • Anwendungen ohne requestExecutionLevel
  • Interaktive Prozesse, die als Standardbenutzer mit aktivierter UAC ausgeführt werden

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

  • Dateiname enthält Schlüsselwörter wie "Installieren", "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, das in die ausführbare Datei eingebettet ist.
  • Schlüsselwörter in bestimmten StringTable-Einträgen, die in der ausführbaren Datei verlinkt sind.
  • Schlüsselattribute in den Ressourcedateidaten, die in der ausführbaren Datei verknüpft sind.
  • Zielsequenzen von Bytes innerhalb der ausführbaren Datei.

  • Hinweis: Die Schlüsselwörter und Sequenzen von Bytes wurden von gemeinsamen Merkmalen abgeleitet, die bei verschiedenen Installationstechnologien beobachtet wurden.

7
kevanb

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 und Sie sehen eine Baumstruktur mit einem Zweig mit dem Namen RT_MANIFEST. Erweitern Sie diesen und doppelklicken Sie auf den einzelnen untergeordneten Eintrag "1 [English United States]".
  5. Ungefähr drei Viertel des Abstiegs in der rechten Spalte sehen Sie requestExecutionLevel level = "highestAvailable", ändern Sie "highestAvailable" in "asInvoker".
  6. Speichern Sie die Datei und fertig.

HTH

Kevan

4
AaronLS

Informationen zu den Heuristiken finden Sie hier: http://msdn.microsoft.com/de-de/library/aa905330.aspx

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

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