Anpassen der Windows-Anwendungsmanifestdatei

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Geräteübergreifende Anwendungstypen, die erstellt werden können

Nach oben zu Anwendungen weitergeben: Übersicht


Wenn Sie ein Projekt für die Windows-Zielplattform erzeugen, bezieht RAD Studio automatisch eine Anwendungsmanifestdatei ein. Sie können die Standard-Anwendungsmanifestdatei als Grundlage für Ihre eigene Anwendungsmanifestdatei verwenden:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 <dependency>
   <dependentAssembly>
     <assemblyIdentity
       type="win32"
       name="Microsoft.Windows.Common-Controls"
       version="6.0.0.0"
       publicKeyToken="6595b64144ccf1df"
       language="*"
       processorArchitecture="*"/>
   </dependentAssembly>
 </dependency>
 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
   <security>
     <requestedPrivileges>
       <requestedExecutionLevel
         level="asInvoker"
         uiAccess="false"/>
       </requestedPrivileges>
   </security>
 </trustInfo>
</assembly>

Die Standard-Anwendungsmanifestdatei definiert:

  • Die Unterstützung für die jeweilige Version der Windows-Standardsteuerelemente
  • Die Rechteerweiterungsstufe der Anwendung, die dem übergeordneten Prozess entspricht.

Erstellen einer benutzerdefinierten Anwendungsmanifestdatei

  1. Erstellen Sie eine leere Textdatei.
  2. Kopieren Sie das Standard-Anwendungsmanifest in diese Datei.
  3. Fügen Sie Abhängigkeiten (wie die erforderliche Rechteerweiterungsstufe oder die DPI-Unterstützung) hinzu, oder ändern Sie sie.
  4. Speichern Sie die Textdatei mit der Erweiterung .manifest.

Deklarieren der erforderlichen Rechteerweiterungsstufe

Das Standard-Anwendungsmanifest deklariert die erforderliche Rechteerweiterungsstufe als asInvoker. Das bedeutet, dass Ihre Anwendung dieselbe Rechteerweiterungsstufe besitzt wie der übergeordnete Prozess. Wenn Sie Ihre Anwendung die Windows-Administrator-Berechtigungsstufe erhalten soll, ändern Sie einfach den Wert des level-Attributs im requestedExecutionLevel-Tag von asInvoker in requireAdministrator.

Hinweis: Der Benutzer benötigt Administratorrechte oder -anmeldeinformationen, um die Anwendung mit der Administrator-Berechtigungsstufe auszuführen.

Die folgende Tabelle enthält Informationen über das Verhalten der Anwendung in häufigen Szenarien in Bezug auf die erforderliche Rechteerweiterungsstufe, die Sie im Anwendungsmanifest deklarieren, und auf die Stufe des der Anwendung übergeordneten Prozesses:

Im Anwendungsmanifest deklarierte Stufe Stufe des übergeordneten Prozesses Verhalten
asInvoker Standardbenutzer Die Anwendung wird als Standardbenutzer gestartet
asInvoker Administrator Die Anwendung wird mit vollständigem administrativen Zugriff gestartet
highestAvailable Standardbenutzer Die Anwendung wird als Standardbenutzer gestartet
highestAvailable Administrator Die Anwendung wird mit vollständigem administrativen Zugriff gestartet
requireAdministrator Standardbenutzer Anforderung der Administrator-Anmeldeinformationen vor dem Ausführen der Anwendung
requireAdministrator Administrator Die Anwendung wird mit vollständigem administrativen Zugriff gestartet

Weitere detaillierte Informationen über das Verhalten von Anwendungen bei verschiedenen Einstellungen finden Sie unter MSDN: Create and Embed an Application Manifest (UAC) (EN)

Deklarieren der DPI-Unterstützung

Um eine Anwendung mit DPI-Unterstützung zu erstellen, müssen Sie die DPI-Unterstützung im Anwendungsmanifest deklarieren. Um beispielsweise zu deklarieren, dass Ihre Anwendung DPI per Monitor unterstützt, fügen Sie Folgendes vor dem schließenden </assembly>-Tag hinzu:

<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
   <asmv3:windowsSettings
        xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
     <dpiAware>True/PM</dpiAware>
   </asmv3:windowsSettings>
</asmv3:application>

Weitere detaillierte Informationen, Anwendungsbeispiele und Codefragmente zur DPI-Unterstützung finden Sie im Dokument Delphi Developers Guide 4K.pdf (EN).

Hinzufügen der benutzerdefinierten Manifestdatei zu Ihrer Anwendung

  1. Wählen Sie Projekt > Optionen > Anwendung, um die Seite Anwendungsoptionen zu öffnen.
  2. Wählen Sie das Zielplattform-Konfigurationspaar aus.
  3. Wählen Sie Benutzerdefiniert aus dem Dropdown-Kombinationsfeld Automatisch erzeugen.
  4. Klicken Sie auf die Ellipsen-Schaltfläche [...] des Feldes Benutzerdefiniertes Manifest, um nach Ihrer benutzerdefinierten .manifest-Datei zu suchen.
Hinweis: Die Anwendungsoptionen sind spezifisch für jedes Plattform-Konfigurationspaar. Sie müssen das benutzerdefinierte Manifest für jedes Plattform-Konfigurationspaar festlegen (es kann sich dabei um dieselbe .manifest-Datei handeln).

Fehlerbehebung

Testen der Administratorberechtigungen

Das folgende Codefragment kann als Schnelltest zur Feststellung dienen, ob Ihre Anwendung Administratorberechtigungen benötigt (und diese ihr korrekt erteilt werden). Deklarieren Sie die erforderliche Rechteerweiterungsstufe Ihrer Anwendung als requireAdministrator, und führen Sie die folgende Prozedur aus:

Delphi:
uses
System.Win.Registry, Winapi.Windows;
procedure isAdmin();
var
  reg: TRegistry;
  openResult: Boolean;
begin
  reg := TRegistry.Create(KEY_READ);
  reg.RootKey := HKEY_LOCAL_MACHINE;
  reg.Access := KEY_WRITE;
  openResult := reg.OpenKey('Software\MyCompanyName\MyApplication\',True);
  if not openResult = True then
    begin
    MessageDlg('Unable to write to registry. Your application does NOT have Administrator level privileges.',
                TMsgDlgType.mtError, mbOKCancel, 0);
    end
  else
    begin
    MessageDlg('Write to registry permitted. Your application has Administrator level privileges.',
                TMsgDlgType.mtInformation, mbOKCancel, 0);
    end;
  reg.CloseKey();
  reg.Free;
end;
C++:
#include <System.Win.Registry.hpp>
#include <Winapi.Windows.hpp>
void __fastcall isAdmin(TObject *Sender){
	TRegistry *reg;
	bool openResult;
	reg = new TRegistry(KEY_READ);
	reg->RootKey = HKEY_LOCAL_MACHINE;
	reg->Access = KEY_WRITE;
	openResult = reg->OpenKey("Software\\MyCompanyName\\MyApplication\\" , true);
	if (openResult != true){
		MessageDlg("Unable to write to registry. Your application does NOT have Administrator level privileges.",
					TMsgDlgType::mtError, mbOKCancel, 0);
	}else{
		MessageDlg("Write to registry permitted. Your application has Administrator level privileges.",
					TMsgDlgType::mtInformation, mbOKCancel, 0);
	}
	reg->CloseKey();
	reg->Free;
}

Die Anwendung zeigt eine der beiden folgenden Meldungen an:

  • Unable to write to registry. Your application does NOT have Administrator level privileges.
  • Write to registry permitted. Your application has Administrator level privileges.

Dieser Test funktioniert, weil Sie Administratorberechtigungen benötigen, um in den Abschnitt HKEY_LOCAL_MACHINE\Software der Registrierung zu schreiben. Dieses Codefragment schreibt nichts in die Registrierung, es fordert nur die Schreibberechtigung an.

Sie müssen Ihre Anwendung erzeugen und dann außerhalb der IDE ausführen, weil die IDE die Anwendung standardmäßig mit Administratorberechtigungen debuggt (ohne Berücksichtigung Ihres Anwendungsmanifests).

Fehler

Prozess kann nicht erzeugt werden: Die Anwendung konnte nicht gestartet werden, weil ihre Side-by-Side-Konfiguration fehlerhaft ist. Weitere Einzelheiten finden Sie im Anwendungsprotokoll oder mithilfe des Befehlszeilentools sxstrace.exe.

  • Dieser Fehler bedeutet in der Regel, dass Sie irgendwo im Anwendungsmanifest einen falschen Wert eingegeben haben. Überprüfen Sie, ob Ihr Manifest ordnungsgemäß formatiert ist und dass alle angegebenen Werte korrekt sind.
    Hinweis: Erzeugen Sie Ihre Anwendung nach dem Ändern des Anwendungsmanifests, damit die Änderungen angewendet werden.

Prozess kann nicht erzeugt werden. Für den angeforderten Vorgang ist eine Rechteerweiterung erforderlich

  • Dieser Fehler wird ausgegeben, wenn Sie die IDE als Standardbenutzer ausführen und versuchen, eine Anwendung, für die Administratorberechtigungen erforderlich sind, zu debuggen. Sie können eine Anwendung, für die Administratorberechtigungen erforderlich sind, nur debuggen, wenn Sie die IDE als Administrator ausführen.

Siehe auch