Cambiar programa predeterminado asociado a una extensión Windows 10 UserChoice Hash método interno

📢 SFTA.exe Ultima Actualización 2019-12-13

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


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
Clave Registro UserChoice – Hash ProgId

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

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

1.0.0 – 2019-01-22

First Release


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *