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

7 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).

  2. Hallo,

    die Lösung funktioniert bei mir (Windows 10 – 1709) leider nur für kurze Zeit. Nach gefühlt 30 Minuten stellt sich die ProgID auf “AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723” zurück. Da ich jedoch gar keinen Edge Browser mehr habe, sind die PDF Dateien dann ohne Programmverknüpfung. Ich werde langsam wahnsinnig…

    Woran kann das liegen?

    1. Ich vermute, dass irgend eine Software den den betreffenden Registry-Eintrag in HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice modifiziert, und damit das Betriebssystem die Einstellungen zurücksetzt. Um den Übeltäter zu finden würde ich mit SysInternals ProcMon die Registry-Zugriffe überwachen und einen Filter für diesen Registry-Zweig einrichten. Jede Form von Schreibzugriff ist verdächtig und sollte den Übeltäter überführen.

        1. Wir müssen hier zwei Situationen unterscheiden. Einerseits die Situation, dass der Explorer-Prozess wieder einen Default herstellt, weil am Registry-Key eine Manipulation vorgenommen wurde. Und andererseits die Manipulation selbst, die den Explorer dazu animiert wieder den Default herzustellen. Die Manipulation ist es, die wir hier suchen. Wenn es tatsächlich so ist, dass gemäß ProcMon der Explorer.exe Prozess eine Manipulation vornimmt, dann vermute ich das dies eine Dritthersteller-Shell-Extension die vom Explorer-Prozess geladen ist tut. Das sollte sich eigentlich herausfinden lassen, indem man sich die Details des betreffenden Process-Monitor Event Eintrages der manipulativen Registry-Veränderung ansieht. In den Properties -> Stack sollte im Stack-Trace ganz oben erkennbar sein, welches Modul (DLL) hier involviert ist. Ich würde hier irgend eine Dritthersteller-Komponente erwarten.

Schreibe einen Kommentar

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