Dateiendungen automatisiert unter Windows 10 mit den gewünschten Applikationen verknüpfen

Applikationen mittels SetUserFTA.exe verknüfen: .pdf mit AdobeReader-DC

Bis Windows 7 war die Verknüpfung von Dateiendungen mit den zugehörigen Programmen mittels “einfacher” Registry-Keys realisiert. Wollte man z.B. per Script die Datei-Zuordnungen herstellen, so war dies bequem mittels Registry-Manipulation (z.B. reg.exe, regedit, etc… ) möglich.

Mit Windows 10 und der Einführung von Universal-Apps ist dies (zumindest für einige gängige Datei-Endungen wie z.B. *.pdf, *.html etc…) nicht mehr so einfach möglich. Die Problematik wird nachfolgend anhand der Verknüpfung von PDF-Dateien erläutert, welche standardmäßig mittels Edge geöffnet und dargestellt werden – selbst wenn Adobe Reader installiert wurde!

Applikationen (wie z.B. Adobe Acrobat Reader) können sich unter Windows 10 nicht mehr selbst als Default registrieren, Anwender können Ihre Präferenz ausschließlich über ein von Windows bereitgestelltes GUI interaktiv festlegen, welches nicht nur die Auswahl von Win32-Anwendungen sondern auch von Universal-Apps anbietet:

Applikationen verknüpfen Auswahldialog
Applikationen verknüpfen: Auswahldialog

Ändert man diese Zuordnung, wird dies wie folgt gespeichert:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice
Applikationen verknüpfen: Registry-Keys
Applikationen verknüpfen: Registry-Keys (Default: verknüpft mit Microsoft Edge Browser)

Auffällig hierbei: Neben dem schon aus früheren Windows-Versionen bekannten “ProgId” Wert, der hier die kryptisch anmutende Zeichenfolge “AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723” beinhaltet (es handelt sich hiebei schlicht um den Well-Known-Identifyer für Microsoft Edge), existiert nun auch eine weitere Zeichenfolge “Hash” mit einem kurzen Base64-kodierten Wert.

Verknüpft man nun mittels des oben dargestellten Auswahl-Dialogs den gewünschten Adobe Reader DC mit der Dateiendung PDF, so ändern sich die Registry-Keys wie folgt:

ProgId: AcroExch.Document.DC
Hash:   Pol5Ki6OyIM=   (neuer, stets wechselnder Wert!)

Folgende Erkenntnis gewinnt man, wenn man den Mechanismus näher untersucht:

  • Versucht man diese Registry-Keys zu manipulieren, z.B. manuell oder gescriptet anzulegen, so werden diese nicht akzeptiert. Der Auswahl-Dialog erscheint wieder, bzw. die Verknüpfung wird auf Edge wiederhergestellt.
  • Die Kombination ProgId + Hash  funktioniert nur auf diesem PC, mit diesem Benutzer und nur solange man den UserChoice Registry-Key nicht “touch’t”. 
  • Im Hash sind daher allem Anschein nach zumindest folgende Merkmale enthalten:
    • Dateiendung (.pdf) und ProgId, z.B.: AcroExch.Document.DC
    • Zeitstempel des UserChoice Registry Keys
    • SID des aktuellen Benutzers, z.B.: S-1-5-21-2884647033-3605804368-1986949432-1005
  • Dies führt dazu, dass man dieses Tupel bestehend aus ProgId und Hash nicht auf andere User oder andere Maschinen transferieren kann. Man kann es nicht einmal sichern und wiederherstellen, da der TimeStamp des Registry-Keys hierbei nicht identisch bleibt.

Lösung a’la Microsoft

Microsoft schlägt vor in einer Enterprise-Umgebung die Verknüpfungen mittels Gruppenrichtlinien bzw. DISM zu konfigurieren. Der Haken hierbei: Das funktioniert nicht so, wie man sich das vorstellt. Damit kann man – sofern die aktuelle Windows-Version dies überhaupt beherrscht, offenbar gibts in diversen Releases Bugs – nur den Default von frischen (noch nie angemeldeten) Profilen beeinflussen. Eine Änderung bestehender Profile lässt sich so nicht durchführen. Siehe z.B. hier – ein über bereits mehrere Jahre und Windows-Versionen hinweg sehr emotional geführter Diskussions-Thread, in dem Microsoft wohl nicht ganz zu unrecht vorgeworfen wird hier untätig zu sein und die Kunden bzw. Administratoren im Stich lässt. Offenkundig haben selbst zahlende Kunden die Enterprise-Support in Anspruch genommen haben um eine Lösung zu finden nichts zufriedenstellendes erhalten!

Lösung: Tool das den Hash errechnet

Ich war kurz davor zu versuchen die geheimnisvolle Microsoft’schen Hash-Implementierung selbst zu debuggen. Mit den Suchbegriffen ProgId Hash Timestamp SID kommt man jedoch recht rasch zur Website von Christoph Kolbicz. Sein bereitgestelltes Tool SetUserFTA berechnet den Hash und kann zum gescripteten Setzen der gewünschten Applikation als Default-Handler verwendet werden:

SetUserFTA sets User File Type Associations per commandline or script on Windows 10 and Server 2016.

Beispiel:

SetUserFTA.exe .pdf AcroExch.Document.DC
Applikationen mittels SetUserFTA.exe verknüpfen: .pdf mit AdobeReader-DC
Applikationen mittels SetUserFTA.exe verknüpfen: .pdf mit AdobeReader

Funktionskontrolle zeigt: Doppelklick auf eine PDF-Datei startet nun unmittelbar Adobe Reader => Problem elegant gelöst. 

Sorge ob das von Christoph Kolbicz bereitgestellte Tool Malware enthalten könnte hatte ich freilich, eine intensive ProcMon-Analyse hat meinerseits jedoch keinerlei Anhaltspunkte für diese Befürchtung ergeben – das Tool tut offenkundig wirklich nur das, was es tun soll und nicht mehr.

Die gleiche Problematik ergibt sich übrigens, wenn die Protokoll-Handler für HTTP/HTTPS etc… geändert werden sollen, also der Default-Browser. Auch hierfür steht ein Tool bereit: SetDefaultBrowser.exe

You May Also Like

2 Comments

  1. Danke für das schöne Writeup – wollte nur anmerken, dass man den Hash sehr wohl auf einen anderen PC übertragen kann.

    Das geht einfach nicht mit reg export oder ähnlichem, da der Timestamp dann natürlich anders wäre – ABER mit einem Profilmanagement geht das.

    Der Hash basiert ja nicht auf Computer, sondern nur auf Benutzer SID – wenn man also die Registry per NTUSER.DAT und USRCLASS.DAT (da sind teilweise die ProgId’s drin) korrekt roamed, dann ist der Hash auf einem anderen Client auch gültig.

    1. Danke Christoph für die Ergänzung. Den Sonderfall die komplette User-Registry unter Beibehaltung der User-SID und Zeitstempel zu transferieren hatte ich in meinen Überlegungen außer Acht gelassen, da dies in meinem Anwendungs-Szenario nicht möglich ist (gleicher Benutzername auf anderem PC, jedoch andere SID).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.