共用方式為


管理並存的檔案關聯

如果您的 VSPackage 提供了檔案關聯,您必須決定如何處理供叫用特定版本的 Visual Studio 開啟檔案的並存安裝。 不相容的檔案格式會使問題複雜化。

使用者預期新版本的產品與舊版相容,因此現有的檔案可以在新版本中載入,而不會遺失資料。 在理想情況下,VSPackage 可以同時載入及儲存舊版的檔案格式。 如果不正確,您應協助將檔案格式升級至新版 VSPackage。 此方法的缺點是升級的檔案無法在舊版中開啟。

若要避免此問題,當檔案格式不相容時,您可以變更副檔名。 例如,VSPackage 的第 1 版可以使用副檔名 .mypkg10,而第 2 版可以使用副檔名 .mypkg20。 此差異可識別開啟特定檔案的 VSPackage。 如果您將較新的 VSPackage 新增至與舊延伸模組相關聯的程式清單,使用者可用滑鼠右鍵按一下檔案,並選擇在較新的 VSPackage 中開啟檔案。 此時,您的 VSPackage 可以提供將檔案升級為新格式或開啟檔案,並維持與舊版 VSPackage 的相容性。

注意

您可以合併這些方法。 例如,您可以載入較舊的檔案,並在使用者儲存時提供升級檔案格式的回溯相容性。

面對問題

如果您想要讓多個並存 VSPackages 使用相同的擴充功能,您必須選擇與擴充功能相關聯的 Visual Studio 版本。 以下是兩個替代方案:

  • 在使用者電腦上安裝的最新版本 Visual Studio 中開啟檔案。

    在此方法中,您的安裝程式會判斷最新版的 Visual Studio,並在針對檔案關聯所撰寫的登錄項目中包含該版本。 在 Windows Installer 套件中,您可以包含自訂動作來設定屬性,指出最新版的 Visual Studio。

    注意

    在此內容中,「最新版」 表示「最新支援的版本」。這些安裝程式項目不會自動偵測後續版本的 Visual Studio。 [偵測系統需求] 和 [必須在安裝後執行的命令] 中的項目,類似於這裡所呈現的項目,而且需要支援其他 Visual Studio 版本。

    CustomAction 資料表中的下列資料列會將 DEVENV_EXE_LATEST 屬性設定為 AppSearch 和 RegLocator資料表,如在必須在安裝後執行的命令中討論之內容。 InstallExecuteSequence 資料表中的資料列會在執行順序早期排程自訂動作。 [條件] 資料行中的值可讓邏輯正常運作:

    • 如果 Visual Studio .NET 2002 是唯一現有的版本,則為最新版本。

    • 只有在 Visual Studio .NET 2003 存在且 Visual Studio 不存在時,才是最新版本。

    • 如果 Visual Studio 是唯一現有的版本,則為最新版本。

      淨結果是,DEVENV_EXE_LATEST 包含最新版 devenv.exe 的路徑。

    CustomAction 資料表資料列確定最新版 Visual Studio

    動作 類型 來源 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]

    InstallExecuteSequence 資料表資料列確定最新版 Visual Studio

    動作 Condition 序列
    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

    您可以使用 Windows Installer 套件登錄資料表中的 DEVENV_EXE_LATEST 屬性來寫入 HKEY_CLASSES_ROOTProgIdShellOpenCommand 機碼的預設值 [DEVENV_EXE_LATEST] “%1”

  • 執行可從可用的 VSPackage 版本做出最佳選擇的共用啟動程式。

    Visual Studio 的開發人員會選擇此方法來處理許多 Visual Studio 版本所產生的多種解決方案和專案格式的複雜需求。 在此方法中,您會將啟動程式註冊為擴充功能處理常式。 啟動程式會檢查檔案,並決定哪個版本的 Visual Studio 和 VSPackage 可以處理該特定檔案。 例如,若使用者開啟上次由特定 VSPackage 版本儲存的檔案,啟動程式可以在相符的 Visual Studio 版本中啟動該 VSPackage。 此外,使用者可以將啟動程式設定為一律啟動最新版本。 啟動程式也可以提示使用者升級檔案的格式。 如果檔案格式包含版本號碼,啟動程式可能會通知使用者檔案格式是否來自比一或多個已安裝 VSPackage 更新的版本。

    啟動格式應該位於與 VSPackage 所有版本共用的 Windows Installer 元件中。 此處理程序可確保一律安裝最新版本,而且在解除安裝 VSPackage 的所有版本之前,都不會移除。 如此一來,即使解除安裝一個版本的 VSPackage,啟動程式元件的檔案關聯和其他登錄項目也會保留下來。

解除安裝和檔案關聯

解除安裝寫入檔案關聯之登錄項目的 VSPackage 後,會移除檔案關聯。 因此,擴充功能沒有相關聯的程式。 Windows Installer 不會「復原」安裝 VSPackage 時新增的登錄項目。 以下是修正使用者檔案關聯的方法:

  • 如先前所述,使用共用啟動程式元件。

  • 指示使用者執行使用者想要擁有檔案關聯之 VSPackage 版本的修復作業。

  • 提供個別的可執行程式,以重寫適當的登錄項目。

  • 提供組態選項頁面或對話方塊,讓使用者選擇檔案關聯,並回收遺失的關聯。 指示使用者在解除安裝之後執行。