? SFTA.exe Ultima Actualización 2020-09-14
Probado en: Windows 8, Windows 8.1, Windows 10 Version 1511, Windows 10 Version 1709, Windows 10 Version 1803, Windows 10 Version 1809, Windows 10 Version 1903, Windows 10 Version 1909, Windows 10 Version 20H2, Windows 11 Pro Version 21H2
Recientemente uno de mis clientes me ha solicitado cambiar el programa predeterminado asociación a una extensión de archivo .pdf con Acrobat Reader DC en Windows 10, todo de manera automática, Lo primero que viene a mi mente es editar la clave de registro UserChoice.
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf\UserChoice

Hash este valor es generado automáticamente por Windows para validar la integridad de la asociación del tipo de archivo.
ProgId este valor corresponde al Id de la aplicación registrada que maneja el tipo de archivo.
El problema principal es que en las versiones recientes de Windows 8/10 este valor de registro está protegido por un hash asociado a un tipo de archivo, y siendo capaz de editarlo sin generar el hash valido la asociación es automáticamente restaurada a la aplicación predeterminada.
Haciendo una búsqueda rápida en google encontré algunas formas de hacerlo usando Directivas de Grupo (GPO Group Policy Object) o importando un .xml con la asociación de tipo de archivos por medio de DISM.exe, pero estos procesos son un poco extensos, después de una búsqueda más profunda y tomando en cuenta que mi cliente necesitaba un solución rápida encontré esta pequeña herramienta de línea de comando SetUserFTA.exe creada por Christoph Kolbicz la cual cumplía con lo requerido y opte por usarla momentáneamente, sin embargo yo quede intrigado por incluir este método directamente en una aplicación desarrollada en cualquier otro lenguaje como C++, AutoIt, Pascal o PowerShell.
Después de unos días luchando contra Windows, y haciendo un poco de investigación en Google, logre encontrar el método que usa Windows Internamente y desarrolle un código para implementarlo en la aplicación de mi cliente.
Yo desarrolle una herramienta de línea de comando en PureBasic para hacer esta tarea en Windows 8/10 muy fácil de usar.

Ejemplo de uso:
Asignar Acrobat Reader DC como predeterminado para abrir archivos .pdf
SFTA.exe AcroExch.Document.DC .pdf
Asignar Sumatra PDF como predeterminado para abrir archivos .pdf
SFTA.exe Applications\SumatraPDF.exe .pdf
Asignar Google Chrome como predeterminado para protocolo http
SFTA.exe ChromeHTML http
Espero que esta herramienta sea de utilidad.
SFTA Changelog
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
1.3.1 – 2020-09-14
Changed
- Hash Algorithm Raw PureBasic Code
1.3.0 – 2020-04-24
Added
- Add Protocol Support
- Add Icon Support for File Type
1.2.1 – 2019-12-13
Added
- Add –list Show All Application Program Id
Fixed
- Fix –get command
1.2.0 – 2019-12-12
Added
- Add Hash Algorithm Method to handle the latest Versions of Windows 10
1.1.0 – 2019-08-07
Added
- Add –reg Register Application Program Id
- Add –unreg Unregister Application Program Id
- Add –debug Display Debug Information
- Add Windows 10_1115 Support – Thanks to Mehdi