Share via


Gestire le associazioni di file side-by-side

Se il pacchetto VSPackage fornisce associazioni di file, è necessario decidere come gestire le installazioni side-by-side in cui deve essere richiamata una determinata versione di Visual Studio per aprire un file. I formati di file incompatibili complicano il problema.

Gli utenti si aspettano che una nuova versione di un prodotto sia compatibile con le versioni precedenti, in modo che i file esistenti possano essere caricati in una nuova versione senza perdere dati. Idealmente, il pacchetto VSPackage può caricare e salvare i formati di file delle versioni precedenti. In caso contrario, è consigliabile offrire di aggiornare il formato di file alla nuova versione del pacchetto VSPackage. Lo svantaggio di questo approccio è che il file aggiornato non può essere aperto nella versione precedente.

Per evitare questo problema, è possibile modificare le estensioni quando i formati di file diventano incompatibili. Ad esempio, la versione 1 del pacchetto VSPackage potrebbe usare l'estensione . mypkg10 e la versione 2 potrebbe usare l'estensione . mypkg20. Questa differenza identifica il VSPackage che apre un file specifico. Se si aggiungono pacchetti VSPackage più recenti all'elenco di programmi associati a un'estensione precedente, gli utenti possono fare clic con il pulsante destro del mouse sul file e scegliere di aprirlo in un pacchetto VSPackage più recente. A questo punto, il VSPackage può offrire di aggiornare il file al nuovo formato o aprire il file e mantenere la compatibilità con le versioni precedenti del VSPackage.

Nota

È possibile combinare questi approcci. Ad esempio, è possibile offrire compatibilità con le versioni precedenti caricando un file precedente e offrendo di aggiornare il formato di file quando l'utente lo salva.

Affrontare il problema

Se si desidera che più pacchetti VSPackage side-by-side usino la stessa estensione, è necessario scegliere la versione di Visual Studio associata all'estensione. Ecco due alternative:

  • Aprire il file nella versione più recente di Visual Studio installata nel computer di un utente.

    In questo approccio, il programma di installazione è responsabile della determinazione della versione più recente di Visual Studio e include tale versione nella voce del Registro di sistema scritta per l'associazione di file. In un pacchetto di Windows Installer è possibile includere azioni personalizzate per impostare una proprietà che indica la versione più recente di Visual Studio.

    Nota

    In questo contesto, "latest" significa "latest supported version". Queste voci del programma di installazione non rileveranno automaticamente una versione successiva di Visual Studio. Le voci in Rilevamento dei requisiti di sistema e nei comandi che devono essere eseguite dopo l'installazione sono simili a quelle presentate qui e sono necessarie per supportare versioni aggiuntive di Visual Studio.

    Le righe seguenti nella tabella CustomAction impostano la proprietà DEVENV_EXE_LATEST come proprietà impostata dalle tabelle AppSearch e RegLocator descritte in Comandi che devono essere eseguite dopo l'installazione. Le righe nella tabella InstallExecuteSequence pianificano le azioni personalizzate all'inizio della sequenza di esecuzione. I valori nella colonna Condizione rendono la logica funzionante:

    • Visual Studio .NET 2002 è la versione più recente se è l'unica versione presente.

    • Visual Studio .NET 2003 è la versione più recente solo se è presente e Visual Studio non è presente.

    • Visual Studio è la versione più recente se è l'unica versione presente.

      Il risultato netto è che DEVENV_EXE_LATEST contiene il percorso della versione più recente di devenv.exe.

    Righe di tabella CustomAction che determinano la versione più recente di Visual Studio

    Azione Type Source Target
    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]

    Righe della tabella InstallExecuteSequence che determinano la versione più recente di Visual Studio

    Azione Condizione Sequence
    CA_SetDevenvLatest_2002 DEVENV_EXE_2002 AND NOT (DEVENV_EXE_2003 OR DEVENV_EXE_2005) 410
    CA_SetDevenvLatest_2003 DEVENV_EXE_2003 AND NOT DEVENV_EXE_2005 420
    CA_SetDevenvLatest_2005 DEVENV_EXE_2005 430

    È possibile utilizzare la proprietà DEVENV_EXE_LATEST nella tabella Del Registro di sistema del pacchetto di Windows Installer per scrivere il valore predefinito della chiave HKEY_CLASedizione StandardS_ROOTProgIdShellOpenCommand, [DEVENV_EXE_LATEST] "%1"

  • Eseguire un programma di avvio condiviso in grado di scegliere tra le versioni di VSPackage disponibili.

    Gli sviluppatori di Visual Studio hanno scelto questo approccio per gestire i requisiti complessi dei diversi formati di soluzioni e progetti risultanti da molte versioni di Visual Studio. In questo approccio si registra un programma di avvio come gestore di estensioni. L'utilità di avvio esamina il file e decide quale versione di Visual Studio e il pacchetto VSPackage può gestire tale file specifico. Ad esempio, se un utente apre un file che è stato salvato per ultima volta da una determinata versione del pacchetto VSPackage, l'utilità di avvio può avviare tale VSPackage nella versione corrispondente di Visual Studio. Inoltre, un utente può configurare l'utilità di avvio per avviare sempre la versione più recente. Un utilità di avvio potrebbe anche richiedere a un utente di aggiornare il formato del file. Se il formato del file include un numero di versione, l'utilità di avvio potrebbe informare un utente se il formato di file proviene da una versione successiva a uno o più pacchetti VSPackage installati.

    L'utilità di avvio deve trovarsi in un componente Windows Installer condiviso con tutte le versioni del pacchetto VSPackage. Questo processo assicura che la versione più recente sia sempre installata e non venga rimossa fino a quando non vengono disinstallate tutte le versioni del pacchetto VSPackage. In questo modo, le associazioni di file e altre voci del Registro di sistema del componente launcher vengono mantenute anche se viene disinstallata una versione del pacchetto VSPackage.

Disinstallare e associazioni di file

La disinstallazione di un VSPackage che scrive le voci del Registro di sistema per le associazioni di file rimuove le associazioni di file. Pertanto, l'estensione non ha programmi associati. Windows Installer non "ripristina" le voci del Registro di sistema aggiunte al momento dell'installazione del pacchetto VSPackage. Ecco alcuni modi per correggere le associazioni di file di un utente:

  • Usare un componente di avvio condiviso come descritto in precedenza.

  • Indicare all'utente di eseguire un ripristino della versione del VSPackage che l'utente vuole possedere l'associazione di file.

  • Specificare un programma eseguibile separato che riscrive le voci del Registro di sistema appropriate.

  • Specificare una pagina o una finestra di dialogo delle opzioni di configurazione che consente agli utenti di scegliere le associazioni di file e recuperare le associazioni perse. Indicare agli utenti di eseguirlo dopo la disinstallazione.