Anwendungsregistrierung
In diesem Thema wird erläutert, wie Anwendungen Informationen über sich selbst verfügbar machen können, die für bestimmte Szenarien erforderlich sind. Dies umfasst Informationen, die zum Suchen der Anwendung erforderlich sind, die von der Anwendung unterstützten Verben und die Dateitypen, die eine Anwendung verarbeiten kann.
Dieses Thema ist wie folgt organisiert:
- Suchen nach einer ausführbaren Anwendung
- Registrieren von Anwendungen
- Registrieren von Verben und anderen Dateizuordnungsinformationen
- Registrieren eines wahrgenommenen Typs
- Zugehörige Themen
Hinweis
Anwendungen können auch in den Systemsteuerungsanwendungen Set Program Access and Computer Defaults (SPAD) und Set Your Default Programs (SYDP) registriert werden. Informationen zur REGISTRIERUNG von SPAD- und SYDP-Anwendungen finden Sie unter Richtlinien für Dateizuordnungen und Standardprogramme und Festlegen von Programmzugriff und Computerstandard (SPAD).
Suchen nach einer ausführbaren Anwendung
Wenn die ShellExecuteEx-Funktion mit dem Namen einer ausführbaren Datei im lpFile-Parameter aufgerufen wird, gibt es mehrere Stellen, an denen die Funktion nach der Datei sucht. Es wird empfohlen, Ihre Anwendung im Registrierungsunterschlüssel App-Pfade zu registrieren. Dadurch wird vermieden, dass Anwendungen die Path-Umgebungsvariable des Systems ändern müssen.
Die Datei wird an den folgenden Speicherorten gesucht:
- Das aktuelle Arbeitsverzeichnis
- Nur das Windows-Verzeichnis (keine Unterverzeichnisse werden durchsucht).
- Das Verzeichnis Windows\System32 .
- Verzeichnisse, die in der PATH-Umgebungsvariablen aufgeführt sind.
- Empfohlen: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App-Pfade
Registrieren von Anwendungen
Sowohl die Unterschlüssel App-Pfade als auch Anwendungsregistrierungen werden verwendet, um das Verhalten des Systems im Auftrag von Anwendungen zu registrieren und zu steuern. Der Unterschlüssel App-Pfade ist der bevorzugte Speicherort.
Verwenden des Unterschlüssels "App-Pfade"
In Windows 7 und höher wird dringend empfohlen, Anwendungen pro Benutzer und nicht pro Computer zu installieren. Eine Anwendung, die für pro Benutzer installiert wird, kann unter HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths registriert werden. Eine Anwendung, die für alle Benutzer des Computers installiert ist, kann unter HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths registriert werden.
Die unter App-Pfade gefundenen Einträge werden in erster Linie für die folgenden Zwecke verwendet:
- Zuordnen des ausführbaren Dateinamens einer Anwendung zum vollqualifizierten Pfad dieser Datei.
- Informationen vorab an die PATH-Umgebungsvariable pro Anwendung und Prozess zu übergeben.
Wenn der Name eines Unterschlüssels von App-Pfaden mit dem Dateinamen übereinstimmt, führt die Shell zwei Aktionen aus:
- Der Eintrag (Standard) wird als vollqualifizierter Pfad der Datei verwendet.
- Der Pfadeintrag für diesen Unterschlüssel wird der PATH-Umgebungsvariablen dieses Prozesses vorangestellt. Wenn dies nicht erforderlich ist, kann der Path-Wert weggelassen werden.
Mögliche Probleme, die sie beachten müssen, sind:
- Die Shell beschränkt die Länge einer Befehlszeile auf MAX_PATH * 2 Zeichen. Wenn viele Dateien als Registrierungseinträge aufgeführt sind oder deren Pfade lang sind, können dateinamen später in der Liste verloren gehen, wenn die Befehlszeile abgeschnitten wird.
- Einige Anwendungen akzeptieren nicht mehrere Dateinamen in einer Befehlszeile.
- Einige Anwendungen, die mehrere Dateinamen akzeptieren, erkennen nicht das Format, in dem sie von der Shell bereitgestellt werden. Die Shell stellt die Parameterliste als Zeichenfolge in Anführungszeichen bereit, aber einige Anwendungen erfordern möglicherweise Zeichenfolgen ohne Anführungszeichen.
- Nicht alle Elemente, die gezogen werden können, sind Teil des Dateisystems. z. B. Drucker. Diese Elemente verfügen nicht über einen Win32-Standardpfad, daher gibt es keine Möglichkeit, shellExecuteEx einen aussagekräftigen lpParameters-Wert bereitzustellen.
Die Verwendung des DropTarget-Eintrags vermeidet diese potenziellen Probleme, indem Zugriff auf alle Zwischenablageformate bereitgestellt wird, einschließlich CFSTR_SHELLIDLIST (für lange Dateilisten) und CFSTR_FILECONTENTS (für Nicht-Dateisystemobjekte).
So registrieren und steuern Sie das Verhalten Ihrer Anwendungen mit dem Unterschlüssel App-Pfade:
Fügen Sie dem Unterschlüssel App-Pfade einen Unterschlüssel mit demselben Namen wie ihre ausführbare Datei hinzu, wie im folgenden Registrierungseintrag gezeigt.
HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER SOFTWARE Microsoft Windows CurrentVersion App Paths file.exe (Default) DontUseDesktopChangeRouter DropTarget Path UseUrl
In der folgenden Tabelle finden Sie Details zu den Unterschlüsseleinträgen für App-Pfade .
Registrierungseintrag | Details |
---|---|
(Standardwert) | Der vollqualifizierte Pfad zur Anwendung. Der im Eintrag (Standard) angegebene Anwendungsname kann mit oder ohne .exe-Erweiterung angegeben werden. Bei Bedarf fügt die ShellExecuteEx-Funktion die Erweiterung beim Durchsuchen des Unterschlüssels App-Pfade hinzu. Der Eintrag ist vom typ REG_SZ . |
DontUseDesktopChangeRouter | Ist obligatorisch für Debuggeranwendungen, um Dateidialog-Deadlocks beim Debuggen des Windows-Explorer-Prozesses zu vermeiden. Das Festlegen des Eintrags DontUseDesktopChangeRouter führt jedoch zu einer etwas weniger effizienten Behandlung der Änderungsbenachrichtigungen. Der Eintrag hat den REG_DWORD Typ, und der Wert ist 0x1. |
DropTarget | Ist ein Klassenbezeichner (CLSID). Der DropTarget-Eintrag enthält die CLSID eines Objekts (in der Regel ein lokaler Server anstelle eines prozessinternen Servers), das IDropTarget implementiert. Wenn das Ablageziel eine ausführbare Datei ist und kein DropTarget-Wert angegeben wird, konvertiert die Shell standardmäßig die Liste der gelöschten Dateien in einen Befehlszeilenparameter und übergibt sie über lpParameters an ShellExecuteEx. |
Pfad | Stellt eine Zeichenfolge (in Form einer durch Semikolons getrennten Liste von Verzeichnissen) bereit, die an die PATH-Umgebungsvariable angefügt werden soll, wenn eine Anwendung durch Aufrufen von ShellExecuteEx gestartet wird. Dies ist der vollqualifizierte Pfad zum .exe. Es ist von REG_SZ. In Windows 7 und höher kann der Typ REG_EXPAND_SZ sein und wird häufig REG_EXPAND_SZ %ProgramFiles% verwendet.
Hinweis: Zusätzlich zu den Einträgen (Standard), Path und DropTarget, die von der Shell erkannt werden, kann eine Anwendung dem Unterschlüssel App-Pfade ihrer ausführbaren Datei auch benutzerdefinierte Werte hinzufügen. Wir empfehlen Anwendungsentwicklern, den Unterschlüssel App-Pfade zu verwenden, um einen anwendungsspezifischen Pfad bereitzustellen, anstatt den globalen Systempfad zu ergänzen. |
SupportedProtocols | Erstellt eine Zeichenfolge, die die URL-Protokollschemas für einen bestimmten Schlüssel enthält. Dieser kann mehrere Registrierungswerte enthalten, um anzugeben, welche Schemas unterstützt werden. Diese Zeichenfolge folgt dem Format schema1:scheme2. Wenn diese Liste nicht leer ist, wird file: der Zeichenfolge hinzugefügt. Dieses Protokoll wird implizit unterstützt, wenn SupportedProtocols definiert ist. |
UseUrl | Gibt an, dass Ihre Anwendung eine URL (anstelle eines Dateinamens) in der Befehlszeile akzeptieren kann. Anwendungen, die Dokumente direkt aus dem Internet öffnen können, z. B. Webbrowser und Media Player, sollten diesen Eintrag festlegen. Wenn die ShellExecuteEx-Funktion eine Anwendung startet und der Wert UseUrl=1 nicht festgelegt ist, lädt ShellExecuteEx das Dokument in eine lokale Datei herunter und ruft den Handler für die lokale Kopie auf. Wenn für die Anwendung beispielsweise dieser Eintrag festgelegt ist und ein Benutzer mit der rechten Maustaste auf eine Datei klickt, die auf einem Webserver gespeichert ist, wird das Verb Öffnen verfügbar gemacht. Andernfalls muss der Benutzer die Datei herunterladen und die lokale Kopie öffnen. Der UseUrl-Eintrag ist vom Typ REG_DWORD , und der Wert ist 0x1. In Windows Vista und früheren Versionen gibt dieser Eintrag an, dass die URL zusammen mit einem lokalen Dateinamen an die Anwendung übergeben werden soll, wenn sie über ShellExecuteEx aufgerufen wird. In Windows 7 gibt dies an, dass die Anwendung jede http- oder HTTPS-URL verstehen kann, die an sie übergeben wird, ohne auch den Cachedateinamen angeben zu müssen. Dieser Registrierungsschlüssel ist dem Schlüssel SupportedProtocols zugeordnet. |
Verwenden des Unterschlüssels "Anwendungen"
Durch die Aufnahme von Registrierungseinträgen in den unterschlüssel HKEY_CLASSES_ROOT\Anwendungen\ApplicationName.exe können Anwendungen die anwendungsspezifischen Informationen bereitstellen, die in der folgenden Tabelle dargestellt sind.
Registrierungseintrag | BESCHREIBUNG |
---|---|
shell\verb | Stellt die Verb-Methode zum Aufrufen der Anwendung aus OpenWith bereit. Ohne hier angegebene Verbdefinition geht das System davon aus, dass die Anwendung CreateProcess unterstützt, und übergibt den Dateinamen in der Befehlszeile. Diese Funktionalität gilt für alle Verbmethoden, einschließlich DropTarget, ExecuteCommand und Dynamic Data Exchange (DDE). |
DefaultIcon | Ermöglicht es einer Anwendung, ein bestimmtes Symbol bereitzustellen, das die Anwendung anstelle des ersten In der .exe-Datei gespeicherten Symbols darstellt. |
FriendlyAppName | Bietet eine Möglichkeit, einen lokalisierbaren Namen für eine Anwendung anstelle der angezeigten Versionsinformationen abzurufen, die möglicherweise nicht lokalisierbar sind. Die Zuordnungsabfrage ASSOCSTR liest diesen Registrierungseintragswert und greift zurück, um den FileDescription-Namen in den Versionsinformationen zu verwenden. Wenn dieser Name fehlt, wird für die Zuordnungsabfrage standardmäßig der Anzeigename der Datei verwendet. Anwendungen sollten ASSOCSTR_FRIENDLYAPPNAME verwenden, um diese Informationen abzurufen, um das richtige Verhalten zu erhalten. |
SupportedTypes | Listet die Dateitypen auf, die von der Anwendung unterstützt werden. Dadurch kann die Anwendung im Kaskadenmenü des Dialogfelds Öffnen mit aufgeführt werden. |
NoOpenWith | Gibt an, dass keine Anwendung zum Öffnen dieses Dateityps angegeben ist. Beachten Sie, dass, wenn ein OpenWithProgIDs-Unterschlüssel für eine Anwendung nach Dateityp festgelegt wurde und der ProgID-Unterschlüssel selbst nicht auch über einen NoOpenWith-Eintrag verfügt, diese Anwendung in der Liste der empfohlenen oder verfügbaren Anwendungen angezeigt wird, auch wenn sie den Eintrag NoOpenWith angegeben hat. Weitere Informationen finden Sie unter Vorgehensweise: Einschließen einer Anwendung in das Dialogfeld Öffnen mit und Ausschließen einer Anwendung aus dem Dialogfeld Öffnen mit. |
IsHostApp | Gibt an, dass es sich bei dem Prozess um einen Hostprozess handelt, z. B. Rundll32.exe oder Dllhost.exe, und er sollte nicht für das Anheften des Startmenüs oder die Aufnahme in die MFU-Liste (Most Frequently Used) berücksichtigt werden. Beim Starten mit einer Verknüpfung, die eine Argumentliste ungleich NULL oder eine explizite Anwendungsbenutzermodell-IDs (AppUserModelIDs) enthält, kann der Prozess angeheftet werden (wie diese Verknüpfung). Solche Verknüpfungen sind Kandidaten für die Aufnahme in die MFU-Liste. |
NoStartPage | Gibt an, dass die ausführbare Anwendung und Tastenkombinationen aus dem Startmenü und vom Anheften oder Einschließen in die MFU-Liste ausgeschlossen werden sollen. Dieser Eintrag wird in der Regel verwendet, um Systemtools, Installationsprogramme und Deinstallationsprogramme sowie Readme-Dateien auszuschließen. |
UseExecutableForTaskbarGroupIcon | Bewirkt, dass die Taskleiste das Standardsymbol dieser ausführbaren Datei verwendet, wenn keine anheftbare Verknüpfung für diese Anwendung vorhanden ist, und anstelle des Symbols des fensters, das zuerst gefunden wurde. |
TaskleisteGroupIcon | Gibt das Symbol an, das zum Überschreiben des Taskleistensymbols verwendet wird. Das Fenstersymbol wird normalerweise für die Taskleiste verwendet. Wenn Sie den TaskbarGroupIcon-Eintrag festlegen, verwendet das System stattdessen das Symbol aus dem .exe für die Anwendung. |
Beispiele
Einige Beispiele für Anwendungsregistrierungen über den HKEY_CLASSES_ROOT\Applications\ApplicationName.exe Unterschlüssel sind wie folgt. Alle Registrierungseintragswerte sind vom Typ REG_SZ , mit Ausnahme von DefaultIcon , das REG_EXPAND_SZ Typs aufweist.
HKEY_CLASSES_ROOT
Applications
wordpad.exe
FriendlyAppName = @%SystemRoot%\System32\shell32.dll,-22069
HKEY_CLASSES_ROOT
Applications
wmplayer.exe
SupportedTypes
.3gp2
HKEY_CLASSES_ROOT
Applications
wmplayer.exe
DefaultIcon
(Default) = %SystemRoot%\system32\wmploc.dll,-730
HKEY_CLASSES_ROOT
Applications
WScript.exe
NoOpenWith
HKEY_CLASSES_ROOT
Applications
photoviewer.dll
shell
open
DropTarget
Clsid = {FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}
HKEY_CLASSES_ROOT
Applications
mspaint.exe
SupportedTypes
.bmp
.dib
.rle
.jpg
.jpeg
.jpe
.jfif
.gif
.emf
.wmf
.tif
.tiff
.png
.ico
Registrieren von Verben und anderen Dateizuordnungsinformationen
Unterschlüssel, die unter HKEY_CLASSES_ROOT\SystemFileAssociations registriert sind, ermöglichen es der Shell, das Standardverhalten von Attributen für Dateitypen zu definieren und freigegebene Dateizuordnungen zu aktivieren. Wenn Benutzer die Standardanwendung für einen Dateityp ändern, hat die ProgID der neuen Standardanwendung Priorität beim Bereitstellen von Verben und anderen Zuordnungsinformationen. Diese Priorität ist darauf zurückzuführen, dass es sich um den ersten Eintrag im Zuordnungsarray handelt. Wenn das Standardprogramm geändert wird, sind die Informationen unter der vorherigen ProgID nicht mehr verfügbar.
Um proaktiv mit den Folgen einer Änderung an Standardprogrammen umzugehen, können Sie HKEY_CLASSES_ROOT\SystemFileAssociations verwenden, um Verben und andere Zuordnungsinformationen zu registrieren. Aufgrund ihrer Position nach der ProgID im Zuordnungsarray haben diese Registrierungen eine niedrigere Priorität. Diese SystemFileAssociationsregistrierungen sind auch dann stabil, wenn Benutzer die Standardprogramme ändern, und stellen einen Speicherort zum Registrieren sekundärer Verben bereit, der immer für einen bestimmten Dateityp verfügbar ist. Ein Registrierungsbeispiel finden Sie weiter unten in diesem Thema unter Registrieren eines wahrgenommenen Typs .
Das folgende Registrierungsbeispiel zeigt, was geschieht, wenn der Benutzer das Standardprogrammelement in Systemsteuerung ausführt, um die Standardeinstellung für .mp3 Dateien in App2ProgID zu ändern. Nach dem Ändern des Standardwerts ist Verb1 nicht mehr verfügbar, und Verb2 wird zur Standardeinstellung.
HKEY_CLASSES_ROOT
.mp3
(Default) = App1ProgID
HKEY_CLASSES_ROOT
App1ProgID
shell
Verb1
HKEY_CLASSES_ROOT
App2ProgID
shell
Verb2
Registrieren eines wahrgenommenen Typs
Registrierungswerte für wahrgenommene Typen werden als Unterschlüssel des HKEY_CLASSES_ROOT\SystemFileAssociations-Registrierungsunterschlüssels definiert. Beispielsweise wird der wahrgenommene Typtext wie folgt registriert:
HKEY_CLASSES_ROOT
SystemFileAssociations
text
shell
edit
command
(Default) = "%SystemRoot%\system32\NOTEPAD.EXE" "%1"
open
command
(Default) = "%SystemRoot%\system32\NOTEPAD.EXE" "%1"
Der wahrgenommene Typ eines Dateityps wird durch Einfügen eines PerceivedType-Werts in den Unterschlüssel des Dateityps angegeben. Der Wert PerceivedType wird auf den Namen des wahrgenommenen Typs festgelegt, der unter HKEY_CLASSES_ROOT\ RegistrierungsunterschlüsselSystemFileAssociations registriert ist, wie im vorherigen Registrierungsbeispiel gezeigt. Fügen Sie z. B. den folgenden Registrierungseintrag hinzu, um CPP-Dateien als vom Typ "text" zu deklarieren:
HKEY_CLASSES_ROOT
.cpp
PerceivedType = text