Administrar asociaciones de archivos en paralelo

Si VSPackage proporciona asociaciones de archivos, debe decidir cómo controlar las instalaciones en paralelo en las que se debe invocar una versión determinada de Visual Studio para abrir un archivo. Los formatos de archivo incompatibles componen el problema.

Los usuarios esperan que una nueva versión de un producto sea compatible con versiones anteriores, de modo que los archivos existentes se puedan cargar en una nueva versión sin perder datos. Idealmente, VSPackage puede cargar y guardar los formatos de archivo de versiones anteriores. Si esto no es cierto, debe ofrecer actualizar el formato de archivo a la nueva versión de VSPackage. El inconveniente de este enfoque es que el archivo actualizado no se puede abrir en la versión anterior.

Para evitar este problema, puede cambiar las extensiones cuando los formatos de archivo sean incompatibles. Por ejemplo, la versión 1 de VSPackage podría usar la extensión , .mypkg10 y la versión 2 podría usar la extensión . mypkg20. Esta diferencia identifica el VSPackage que abre un archivo determinado. Si agrega VSPackages más recientes a la lista de programas asociados a una extensión antigua, los usuarios pueden hacer clic con el botón derecho en el archivo y elegir abrirlo en un VSPackage más reciente. En ese momento, VSPackage puede ofrecer actualizar el archivo al nuevo formato o abrir el archivo y mantener la compatibilidad con versiones anteriores de VSPackage.

Nota:

Puede combinar estos enfoques. Por ejemplo, puede ofrecer compatibilidad con versiones anteriores cargando un archivo anterior y ofreciendo actualizar el formato de archivo cuando el usuario lo guarda.

Enfrentar el problema

Si desea que varios VSPackages en paralelo usen la misma extensión, debe elegir la versión de Visual Studio asociada a la extensión. Estas son dos alternativas:

  • Abra el archivo en la versión más reciente de Visual Studio instalada en el equipo de un usuario.

    En este enfoque, el instalador es responsable de determinar la versión más reciente de Visual Studio e incluirla en la entrada del Registro escrita para la asociación de archivos. En un paquete de Windows Installer, puede incluir acciones personalizadas para establecer una propiedad que indique la versión más reciente de Visual Studio.

    Nota:

    En este contexto, "latest" significa "versión compatible más reciente". Estas entradas del instalador no detectarán automáticamente una versión posterior de Visual Studio. Las entradas de detección de requisitos del sistema y en comandos que deben ejecutarse después de la instalación son similares a las que se presentan aquí y son necesarias para admitir versiones adicionales de Visual Studio.

    Las siguientes filas de la tabla CustomAction establecen la propiedad DEVENV_EXE_LATEST para que sea una propiedad establecida por las tablas AppSearch y RegLocator descritas en Comandos que se deben ejecutar después de la instalación. Las filas de la tabla InstallExecuteSequence programan las acciones personalizadas al principio de la secuencia de ejecución. Los valores de la columna Condición hacen que la lógica funcione:

    • Visual Studio .NET 2002 es la versión más reciente si es la única versión actual.

    • Visual Studio .NET 2003 es la versión más reciente solo si está presente y Visual Studio no está presente.

    • Visual Studio es la versión más reciente si es la única versión actual.

      El resultado neto es que DEVENV_EXE_LATEST contiene la ruta de acceso de la versión más reciente de devenv.exe.

    Filas de tabla CustomAction que determinan la versión más reciente de Visual Studio

    Acción Tipo Source Destino
    CA_SetDevenvLatest_2002 51 DEVENV_EXE_LATEST [DEVENV_EXE_2002]
    CA_SetDevenvLatest_2003 51 DEVENV_EXE_LATEST [DEVENV_EXE_2003]
    CA_SetDevenvLatest_2005 51 DEVENV_EXE_LATEST [DEVENV_EXE_2005]

    Instalar filas de tablaExecuteSequence que determinan la versión más reciente de Visual Studio

    Acción Condición Secuencia
    CA_SetDevenvLatest_2002 DEVENV_EXE_2002 AND NOT (DEVENV_EXE_2003 O DEVENV_EXE_2005) 410
    CA_SetDevenvLatest_2003 DEVENV_EXE_2003 Y NO DEVENV_EXE_2005 420
    CA_SetDevenvLatest_2005 DEVENV_EXE_2005 430

    Puede usar la propiedad DEVENV_EXE_LATEST en la tabla Registro del paquete de Windows Installer para escribir el valor predeterminado de la clave ProgIdde HKEY_CLASSES_ROOTShellOpenCommand, [DEVENV_EXE_LATEST] "%1".

  • Ejecute un programa de iniciador compartido que pueda elegir mejor entre las versiones disponibles de VSPackage.

    Los desarrolladores de Visual Studio eligieron este enfoque para controlar los requisitos complejos de los distintos formatos de soluciones y proyectos resultantes de muchas versiones de Visual Studio. En este enfoque, registrará un programa iniciador como controlador de extensión. El iniciador examina el archivo y decide qué versión de Visual Studio y vsPackage pueden controlar ese archivo en particular. Por ejemplo, si un usuario abre un archivo guardado por última vez por una versión determinada de VSPackage, el iniciador puede iniciar ese VSPackage en la versión coincidente de Visual Studio. Además, un usuario podría configurar el iniciador para iniciar siempre la versión más reciente. Un iniciador también podría pedir a un usuario que actualice el formato del archivo. Si el formato del archivo incluye un número de versión, el iniciador podría informar a un usuario si el formato de archivo procede de una versión posterior a una o varias de las VSPackage instaladas.

    El iniciador debe estar en un componente de Windows Installer que se comparta con todas las versiones de VSPackage. Este proceso garantiza que la versión más reciente esté siempre instalada y no se quite hasta que se desinstalen todas las versiones de VSPackage. De este modo, las asociaciones de archivos y otras entradas del registro del componente de iniciador se conservan aunque se desinstale una versión de VSPackage.

Desinstalar y asociaciones de archivos

Al desinstalar un VSPackage que escribe entradas del Registro para asociaciones de archivos, se quitan las asociaciones de archivo. Por lo tanto, la extensión no tiene programas asociados. Windows Installer no "recupera" las entradas del Registro que se agregaron cuando se instaló VSPackage. Estas son algunas maneras de corregir las asociaciones de archivos de un usuario:

  • Use un componente de iniciador compartido como se ha descrito anteriormente.

  • Indique al usuario que ejecute una reparación de la versión del VSPackage que el usuario quiere poseer la asociación de archivos.

  • Proporcione un programa ejecutable independiente que vuelva a escribir las entradas del Registro adecuadas.

  • Proporcione una página o un cuadro de diálogo de opciones de configuración que permita a los usuarios elegir asociaciones de archivos y reclamar asociaciones perdidas. Indique a los usuarios que lo ejecuten después de la desinstalación.