Wie kann man Windows 7 mitteilen, dass eine Anwendung nicht mit Administratorrechten ausgeführt werden muss? [Duplikat]

8

Mögliches Duplizieren:
Verhindern Sie eine Erhöhung (UAC) für eine Anwendung, die diese nicht benötigt

Ich verwende eine Anwendung, die vor Windows Vista / Windows 7 geschrieben wurde. Windows hat entschieden, dass die Anwendung als Administrator ausgeführt werden muss (dh sie hat das Schildsymbol). Ich bin mir ziemlich sicher, dass die Anwendung nichts in ihrem Manifest enthält, was darauf hinweist, dass sie mit erhöhten Berechtigungen ausgeführt werden muss (sie wurde bereits vor Windows Vista geschrieben).

Gibt es eine Möglichkeit, Windows mitzuteilen, dass eine bestimmte Anwendung keine erhöhten Berechtigungen benötigt?

user13141
quelle

Antworten:

14

Windows erhöht Anwendungen automatisch anhand verschiedener Kriterien (siehe Grundlegendes zur und Konfiguration der Benutzerkontensteuerung in Windows Vista ):

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

  • Der Dateiname enthält Schlüsselwörter wie "Installieren", "Einrichten", "Aktualisieren" usw.
  • Schlüsselwörter in den folgenden Feldern für Versionsressourcen: Hersteller, Firmenname, Produktname, Dateibeschreibung, ursprünglicher Dateiname, interner Name und Exportname.
  • Schlüsselwörter im Side-by-Side-Manifest, eingebettet in die ausführbare Datei.
  • Schlüsselwörter in bestimmten StringTable-Einträgen, die in der ausführbaren Datei verknüpft sind.
  • Schlüsselattribute in den RC-Daten, die in der ausführbaren Datei verknüpft sind.
  • Gezielte Folgen von Bytes in der ausführbaren Datei.

Wenn Sie eine Erhöhung nicht verhindern können, indem Sie die Datei umbenennen, sollten Sie in der Lage sein , ein Manifest zu erstellen, das eine Erhöhung verhindert .

bk1e
quelle
4
Dass automatische Erhöhungen basierend auf Schlüsselwörtern krank sind!
Nawfal
9

Angenommen, das Programm wurde ordnungsgemäß geschrieben und funktioniert tatsächlich , wenn es als Standardbenutzer ausgeführt wird, können Sie es als Standardbenutzer ausführen.

Hinweis : Wenn das Programm unter Windows XP nicht funktioniert hat, schlägt es unter Windows Vista oder Windows 7 weiterhin fehl. Sie können diese Anwendung testen, indem Sie sich bei Windows XP anmelden und prüfen, ob sie funktioniert. (Sie tun Login auf Windows XP als Standardbenutzer, nicht wahr?)

Wenn das Programm unter Windows XP als Standardbenutzer nicht ordnungsgemäß ausgeführt wird, kann es unter Windows 7 als Standardbenutzer nicht ordnungsgemäß ausgeführt werden. Wenn Sie das Programm als Administrator unter Windows XP ausführen müssen, müssen Sie das Programm als Administrator unter Windows 7 ausführen.

Wenn Sie zufrieden sind, dass das Programm nicht als Administrator ausgeführt werden muss, können Sie eine Manifest- Anweisung Windows hinzufügen , die als Standardbenutzer ausgeführt werden soll.

Erstellen Sie die Manifestdatei im selben Ordner wie Ihre Anwendung. zB Goldwave.exeerstellen Sie:

Goldwave.exe.manifest::

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="IsUserAdmin"
     type="win32"/> 
  <description>Description of your application</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Hinweis: Dies ist ein sogenanntes externes Manifest, da es sich in einer separaten Datei befindet. Es ist durchaus möglich , dass die Anwendung bereits hat ein Manifest.

Manifeste wurden mit Windows 2000 eingeführt, um Abhängigkeiten von bestimmten Versionen von DLLs zu deklarieren. Eine weitverbreitete Anwendung dieses Manifest kam mit Windows XP zusammen, um Programmen ihre dependancy auf zu erklären , Version 6 von comctl32.dll- so dass der Antrag wurde „ unter dem Motto“.

Wenn die Anwendung bereits über ein eingebettetes Manifest verfügt, ignoriert Windows jedes externe Manifest. In diesem Fall müssen Sie Resource Hacker verwenden , um das eingebettete RT_MANIFESTManifest (Ressourcentyp 24) zu ändern .


Das nächste, was Sie tun können, ist die Registrierung zu überprüfen, um festzustellen, ob jemand bereits einen Elevate Shim auf Ihr Programm angewendet hat . Laden Sie Regedit und überprüfen Sie:

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags
    \Layers

Dort finden Sie wahrscheinlich eine große Anzahl von Programmen mit ihren durch Leerzeichen getrennten Unterlegscheiben:

  • C: \ Programme (x86) \ ACDSee32 \ ACDSee32.exe HIGHDPIAWARE
  • C: \ Programme (x86) \ Google \ Picasa3 \ Picasa3.exe ELEVATECREATEPROCESS
  • C: \ Programme (x86) \ SkiStunt \ SkiStunt \ bin \ SkiStunt.exe WINXPSP2
  • C: \ Programme (x86) \ Steam \ Steam.exe HIGHDPIAWARE ELEVATECREATEPROCESS
  • C: \ Programme (x86) \ SysInternals \ autoruns.exe ELEVATECREATEPROCESS RUNASADMIN
  • C: \ Programme (x86) \ Windows Live \ Messenger \ msnmsgr.exe VISTASP2
  • D: \ Spiele \ Call of Duty \ CoDSP.exe WINXPSP3
  • D: \ Shared \ Win32app \ Spy \ SPYXX.EXE DISABLEDWM

Überprüfen Sie, ob Ihr Programm nicht vorhanden ist. Sie können auch einen ähnlichen Satz von Einträgen (die für " alle Benutzer ") finden in:

HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\AppCompatFlags\Layers
Ian Boyd
quelle
Wie kommen die Unterlegscheiben dorthin?
Michael Slade
@MichaelSlade Wenn Sie die Optionen auf der Registerkarte Kompatibilität der Eigenschaften eines Programms aktivieren . Diese Einstellungen werden in der Registry gespeichert AppCompatFlagsSchlüssel
Ian Boyd
Gibt es einen Grund, warum eine ausführbare Datei immer noch die Ausführung von Elevation unter einem Standardbenutzerkonto anfordert, selbst wenn das Manifest bearbeitet wurde, um <requestExecutionLevel level = "asInvoker" uiAccess = "false" /> anzugeben?
Sajuuk
@Sajuuk Ich habe so etwas gesehen. Windows hat entschieden, dass meine App erhöht werden muss, und ich möchte nicht, dass sie erhöht wird. Also habe ich eine Assembly Manifest hinzufügen, und bestätigen Sie die Assembly - Manifest wird verwendet, aber es immer noch löst eine UAC ausgeführt wird . Die Ursache ist, dass Windows (irgendwo) die Tatsache zwischengespeichert hat, dass Project1.exeeine Erhöhung erforderlich ist, und dass dies bis zum Neustart des Systems gespeichert wird.
Ian Boyd
1

Wenn die Anwendung lange vor Windows Vista / 7 geschrieben wurde, besteht eine gute Chance, dass für die Ausführung Administratorrechte erforderlich sind. Viele Programme gingen davon aus, dass die installierende Person Administratorrechte haben würde, und schrieben daher nur in die Abschnitte der Registrierung und des Dateisystems, die der Programmierer für am besten hielt.

Ich weiß das aus meiner eigenen persönlichen Erfahrung. Vor ungefähr einem Jahrzehnt arbeitete ich für ein Unternehmen, das seine Software an ein großes Automobilunternehmen verkaufte. Alle ihre PCs waren gesperrt. Wir mussten unseren Code ändern, damit er von jemandem installiert werden konnte, der nur mit "Benutzer" -Rechten arbeitet.

ChrisF
quelle