Archivo

Archivo para la categoría ‘Windows’

Publicar nuestra aplicación MSIX en la tienda de Microsoft

lunes, 9 de marzo de 2026 Sin comentarios
Share Button

Con esta última entrada se completa esta serie. Vamos a ver cómo generar un paquete con el nuevo formato MSIX, preparado para publicar una aplicación en la tienda de Microsoft.
Recordamos las entradas anteriores.

Roadmap de las entradas

Introducción

Como ya he comentado antes, el nuevo formato y preferido para publicar aplicaciones en la tienda de Microsoft son los empaquetados MSIX, que sustituyen a los antiguos APPX. Nos permite empaquetar aplicaciones Win32, WPF y Windows forms con un único formato moderno. Conserva la funcionalidad de los paquetes existentes y además habilita funciones modernas de empaquetado.

RAD Studio introdujo la generación automática de paquetes MSIX para sus aplicaciones Delphi y C++ Builder en verisones superiores a la 10.4.2.  Y esta característica se puede usar tanto con VCL como con FMX.

Empaquetado en MSIX

Estructura del formato MSIXMicrosoft nos presenta MSIX como la solución moderna y de código abierto para superar este obstáculo. MSIX es un formato de empaquetado universal que:

  • Desacopla las actualizaciones del sistema operativo, las aplicaciones y las personalizaciones del usuario.
  • Permite un flujo continuo de código (continuous delivery) con despliegues predecibles, confiables y optimizados.
  • Instala solo los archivos necesarios y ahorra espacio en disco y ancho de banda.
  • Usa un contenedor que aísla la aplicación y garantiza seguridad, rendimiento estable y desinstalaciones limpias (evita el temido «machine rot» o deterioro progresivo del sistema por instalaciones sucias).
  • Facilita la actualización de aplicaciones Win32 existentes al formato MSIX mediante la herramienta MSIX Packaging Tool.

Como característica claves de este formato podríamos nombrar:

  • La fiabilidad
  • Optimización del ancho de banda de la red
  • Optimización del espacio en disco

Si queréis ampliar la lectura sobre este formato, podéis revisar este link (oficial de Microsoft) que habla con más detalle, y también este otro, más técnico y con una lista de recursos adicionales sobre este formato (vídeos, documentación, links,…)

Cómo generar un MSIX desde RAD Studio (adhoc)

Como hicimos en la entrada anterior, vamos a utilizar una aplicación ya existente para detallar el proceso de generación. En este caso, un widget de información sobre la CPU. Al igual que la anterior, es un  pequeño widget de escritorio que me da información sobre la carga de la CPU y muestra algunos detalles sobre el procesador, arquitectura,…

Nos servirá, igual que en la entrada anterior, para ilustrar los siguientes pasos. Una vez que esté subida os adjuntaré el link a la tienda de Microsoft:

     

A la hora de generar el empaquetado desde el IDE de Delphi tenemos 2 opciones:

  • adhoc: Esta opción está pensada para generar instalaciones en local para nuestras pruebas (QA). Para enviar directamente a clientes/usuarios sin necesidad de pasar  por la Microsoft Store. Permite lo que llamamos una instalación sideloading.
  • store: Es la opción para publicar en la Microsoft Store (a través del Partner Center). Este paquete está pensado para enviarse, no para instalarse localmente.

Por ahora nos vamos a centrar en la opción adhod, así que debemos continuar con los pasos siguientes:

Iconos y Versionado de la aplicación

Ya lo vimos en la entrada anterior, pero lo repasamos en esta. Debemos añadir opciones de versión a la aplicación desde Project options/Applicaction/Version. Rellenar los 2 primeros números de versión (yo recomiendo dejar los 2 últimos a cero), desactivar la opción de incrementar la build cada vez que se compila («Do not change build number») y por último desactivar todos los checks que definen características especiales de la Build (Debug build, Special build, Pre-release,…).

También deberíamos rellenar en Project options/Applicaction/Icons el icono para la aplicación (esto siempre)  y los logos de nuestra aplicación (de 150px y 44 px).

Opciones de despliegue

Lo siguiente es acceder a Project options/Deployment/Provisioning, para definir las opciones de despliegue. Seleccionaremos:

  • Target: releaseDatos del certificado
  • Build Type: Application Store
  • Distribution type: Ad hoc.

Y rellenamos los datos del certificado. Para nuestra pruebas, ya vimos en la entrada anterior cómo generar uno desde el propio entorno de Delphi. Guardamos estas opciones.

Ahora ya podemos realizar el Build del proyecto y acceder a Project / Deployment y lanzar el Deploy.

Una vez acabado el proceso, como salida tenemos un paquete de instalación con extensión .MSIX. Con este fichero ya tenemos un instalable para distribuir.

Desplegar un instalable sobre la tienda

Lo primero que debemos hacer es «reservar» el nombre de la aplicación en nuestra cuenta de «Dev Center». En mi caso voy a reservar el nombre «Widget Información CPU».  Una vez ese paso está completado, podemos acceder a la información completa de la aplicación. A continuación os muestra los datos del Widget.

Estos datos serán lo que deberemos rellenar en la sección de Provisioning de nuestro proyecto:

Ahora vamos al Deployment (igual que antes) y generamos un Deploy.
Una vez generado el paquete .MSIX ya podemos subirlo a la «Windows Store». Al acabar la subida, se validará desde la tienda el paquete que hemos subido y se mostrará la información asociada a él. A continuación os muestro la información que se muestra para la aplicación que acabo de subir.

Podeís ver información al respecto en este link de la docWiki de Embarcadero.

Para finalizar la publicación de la aplicación, deberéis completar toda la información necesaria y que ya comenté en anteriores entradas. Descripciones, idiomas soportados, imágenes, categorías de edad, tipo de licencia,… Toda la información que después se muestra en la tienda a los usuarios.

Hasta aquí esta entrada y la serie. Espero que hayan sido útiles para los que estáis pensando en publicar.

Como siempre, cualquier comentario, duda o sugerencia será bienvenida.

Hasta la próxima.

Primera versión pública de la aplicación DebugStringView (v.1.1)

martes, 1 de abril de 2025 2 comentarios
Share Button

Hace unos días ya hablé en esta entrada de la API de Windows OutputDebugString y de cómo nos puede ser útil en nuestro día a día de programar cuando realizamos debug de nuestros programas.

También comenté en su día sobre algunas herramientas que nos ayudan a visualizar los mensajes que desde nuestras aplicaciones enviamos a la consola de debug. Las he utilizado (las 2 que comento en la entrada) y funcionan bien, pero al final no se ajustan a lo que a mi me gustaría o no tienen todo lo que a mi me gustaría que tuvieran; Algunas características están disponibles en una y al gunas en la otra. Así que mi decisión ha sido crear una nueva «a mi gusto» que tenga todo lo que yo quiero o necesito.

Tal vez no esté todo en esta primera versión, pero mi idea es ir completándola poco a poco con más características que tengo en mente.  De aquí es de dónde ha salido este nuevo proyecto (herramienta DebugStringView).

El código fuente está disponible en mi repositorio de Github y es gratuita y de libre uso. Para no alargar más esta entrada de «Presentación» os remito a la propia de la aplicación, ahí tenéis más información.

https://neftali.clubdelphi.com/debugstringview/

Ahí será donde vaya actualizando todo lo referente a esta herramienta.
Para descargar binarios podéis hacerlo desde aquí (página específica de la aplicación) , donde ya está disponible la descarga de los binarios (32 y 64 bits) en formato ZIP. No requiere instalación.

Para los que la utilicéis, os agradecería que me enviaseis comentarios y por supuesto posibles errores que encontréis y cualquier sugerencia de mejora que consideréis.

Controlador de Previsualización (PreviewHandler) para imágenes (v.1.0)

lunes, 10 de junio de 2024 3 comentarios
Share Button

ShellPreviewImagesFiles es un controlador de vista previa (PreviewHandler) para las últimas versiones de Windows que admite los tipos de imágenes más habituales actualmente.

Esta herramienta está basada en la serie de entradas que puedes encontrar en este mismo blog sobre la creación de Previews Handler en Delphi.

Los sistemas Windows traen por defecto algunas previsualizaciones incluidas, pero no todos los ficheros de tipos habituales traen una previsualización «de fábrica». Esto pasa con algunos ficheros de imágenes. Esta extensión permite ver previsualizaciones de las siguientes imágenes en el panel de Vista Previa del Explorador de Windows.

Permite trabajar con los siguientes formatos/extensiones:

Extensiones Descripción
.bmp Imagenes de mapas de bits
.jpg, .jpeg Imágenes jpg (Joint Photographic Experts Group)
.png Portable Network Graphics
.gif Graphics Interchange Format
.ico Ficheros de iconos
.wmf, .emf Windows metafiles y Enhanced Windows Metafiles
.tif, .tiff Tagged Image File Format
.svg Gráficos vectoriales (Scalable Vector Graphics)

Para algunas imágenes hacemos un tratamiento especial.

En el caso de las SVG, dado que son imágenes vectoriales que internamente se almacenan como archivos de texto (XML), la previsualización nos permite verlas como imagen (opción por defecto y más habitual), pero si es necesario también como texto.

Debajo se ve una imagen con las 2 previsualizaciones disponibles para un fichero,

En el caso de los ficheros de iconos ICO, que pueden almacenar varias imágenes en diferentes resoluciones, también reciben un comportamiento especial. Se muestra en la previsualización las diferentes imágenes incluida en el fichero de icono, junto con las dimensiones de cada uno de ellos.

Debajo de este texto se ve una imagen de la previsualización de un fichero de icono que incluye dentro varias imágenes de diferentes dimensiones.

Por ahora no necesita librerías de terceros y está totalmente programada utilizando Delphi.

Es de uso libre.

Os aquí el instalador para descarga. Por defecto la instalación se realiza sobre el directorio:
«c:\Program Files (x86)\ShellPreviewExtFiles\»

Download instalador (Windows 32b)

Cualquier duda, comentarios, error,… me lo podéis dejar en los comentarios.

 

 

III-Generando una previsualización funcional (PreviewHandler)

lunes, 27 de mayo de 2024 Sin comentarios
Share Button

INTRODUCCIÓN

Continuamos con el tema de las 2 últimas entradas. Visto el esqueleto del proyecto y probado que funciona (la carga, descarga y registro de la DLL) ahora nos queda generar una previsualización funcional. Hasta ahora hemos visto que podemos mostrar un formulario «vacío», ahora nos toca programar realmente la carga del fichero (según su tipo).

Os adjunto los links de todas las entradas de esta serie, que iré completando a medida que avance:

  1. Crear una Previsualización de ficheros en Windows
  2. «Registros» de una DLL de previsualización
  3. Generando previsualización funcional (PreviewHandler)
  4. Instalador para PreviewHandler de imágenes/texto (Inno Setup)

.

PROGRAMAR REALMENTE LA PREVISUALIZACIÓN

Con la estructura que tenemos del proyecto anterior, lo único que tenemos que hacer ahora es programar la carga y visualización de la información del fichero en el formato que queramos ofrecerla al usuario.
Para este primer ejemplo vamos a empezar con algo sencillo.
Realizaremos una previsualización de ficheros de log (*.LOG) que vamos a tratar como ficheros de texto plano.

Leer más…

II – «Registros» de una DLL de previsualización (PreviewHandler)

miércoles, 22 de mayo de 2024 Sin comentarios
Share Button

INTRODUCCIÓN

Continuando el tema de «Crear una Previsualización de ficheros en Windows», vamos a seguir completando esta serie, haciendo referencia al tema del registro que nos quedó pendiente en la anterior entrada.
Os adjunto los links de todas las entradas de esta serie, que iré completando a medida que avance:

  1. Crear una Previsualización de ficheros en Windows
  2. «Registros» de una DLL de previsualización
  3. Generando previsualización funcional (PreviewHandler)
  4. Instalador para PreviewHandler de imágenes/texto (Inno Setup)

 

Hablo de «registros» en el título de esta entrada, porque vamos a abordar por un lado, los cambios en el «registro de Windows» que debemos realizar para que nuestra DLL quede «inscrita» en el sistema (con esto le decimos al sistema, que cuando quiera visualizar un determinado fichero de extensión AAA, debe cargar nuestra DLL para mostrar ese contenido). Y en segundo lugar, veremos cómo registrar nuestra DLL en Windows a través de regsrv32.

.

CLAVES DE REGISTRO

Cuando registramos nuestra DLL (regsvr32) necesitamos modificar algunos valores en el registro de Windows para indicar al sistema que tiene una DLL disponible para utilizar cuando se le solicite una vista previa de un archivo con extensión AAA.
Para ello tenemos disponible esta documentación que explica los diferentes cambios a crear/borrar cuando realizamos el register/unregister.

https://learn.microsoft.com/en-us/windows/win32/shell/how-to-register-a-preview-handler
https://learn.microsoft.com/es-es/windows/win32/shell/how-to-register-a-preview-handler

Lo primero que debemos tener en cuenta, es que si nuestro controlador de Vista previa (de 32 bits) se está registrando en un sistema de 64 bits, tal y como se describe aquí, debe usar un IdApp diferente;

Leer más…

Categories: Código, DLL, Ejemplos, Windows Tags: , , ,

Delphi 12 Athens; Tratamiento de aplicaciones MDI

jueves, 4 de abril de 2024 2 comentarios
Share Button

Interfaz MDI

Aunque seguro que no es una de las características más utilizadas hoy en día en los programas nuevos desarrollados en Delphi, es probable que tengamos programas antiguos que funcionan con esta interfaz de usuario. Yo mismo tengo alguno que todavía la usa.

Hasta ahora migrar esos programas a versiones nuevas podía ser un problema debido a que Microsoft ha declarado MDI como obsoleta y el funcionamiento no acaba de de ser el correcto. Problemas con el repintado, los estilos y con High DPI entre otros.

Para la versión 12 de Delphi se ha intentado solventar estos problemas implementando la solución desde el propio Delphi y no dejando que lo solvente Windows. El resultado no sólo es, que ahora ya podemos recompilar nuestras aplicaciones antiguas con la versión 12 y volver a tener lo mismo que teníamos antes, sino que con esta modificación, el resultado puede ser «mejor» todavía que el que teníamos en la versión antigua.
¿Porqué esto último?
Porque además de implementar las características del MDI para que funcionen correctamente, se ha añadido un nuevo componente, que si lo utilizamos (no es obligatorio), las mejorará sobre todo a nivel visual y de usabilidad.

Leer más…