Поделиться через


Управление сопоставлениями файлов параллельно

Если VSPackage предоставляет сопоставления файлов, необходимо решить, как обрабатывать параллельные установки, в которых должна вызываться определенная версия Visual Studio, чтобы открыть файл. Несовместимые форматы файлов усугубляют проблему.

Пользователи ожидают, что новая версия продукта совместима с более ранними версиями, чтобы существующие файлы могли загружаться в новой версии без потери данных. В идеале VSPackage может загружать и сохранять форматы файлов более ранних версий. Если это не так, следует предложить обновить формат файла до новой версии VSPackage. Недостатком этого подхода является то, что обновленный файл нельзя открыть в более ранней версии.

Чтобы избежать этой проблемы, можно изменить расширения, если форматы файлов становятся несовместимыми. Например, версия 1 пакета VSPackage может использовать расширение , mypkg10 и версия 2 может использовать расширение mypkg20. Это различие определяет VSPackage, открывающее определенный файл. При добавлении новых VSPackages в список программ, связанных со старым расширением, пользователи могут щелкнуть файл правой кнопкой мыши и открыть его в новом VSPackage. На этом этапе VSPackage может предложить обновить файл до нового формата или открыть файл и обеспечить совместимость с более ранними версиями VSPackage.

Примечание.

Эти подходы можно объединить. Например, вы можете предложить обратную совместимость, загрузив старый файл и предложив обновить формат файла при сохранении.

Сталкиваются с проблемой

Если требуется использовать одно и то же расширение несколькими параллельными пакетами VSPackage, необходимо выбрать версию Visual Studio, связанную с расширением. Ниже приведены два варианта:

  • Откройте файл в последней версии Visual Studio, установленной на компьютере пользователя.

    В этом подходе установщик отвечает за определение последней версии Visual Studio и в том числе в записи реестра, написанной для сопоставления файлов. В пакет установщика Windows можно включить пользовательские действия, чтобы задать свойство, указывающее последнюю версию 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 Sequence
    CA_SetDevenvLatest_2002 DEVENV_EXE_2002 И НЕТ (DEVENV_EXE_2003 ИЛИ DEVENV_EXE_2005) 410
    CA_SetDevenvLatest_2003 DEVENV_EXE_2003 И НЕ DEVENV_EXE_2005 420
    CA_SetDevenvLatest_2005 DEVENV_EXE_2005 430

    Свойство DEVENV_EXE_LATEST в таблице реестра пакета установщика Windows можно использовать для HKEY_CLASSES_ROOTзаписи значения по умолчанию ключа ProgIdShellOpenCommand , [DEVENV_EXE_LATEST] "%1"

  • Запустите общую программу запуска, которая может выбрать лучший выбор из доступных версий VSPackage.

    Разработчики Visual Studio выбрали этот подход для обработки сложных требований нескольких форматов решений и проектов, которые приводят к множеству версий Visual Studio. В этом подходе вы регистрируете программу запуска в качестве обработчика расширений. Средство запуска проверяет файл и решает, какая версия Visual Studio и VSPackage может обрабатывать этот конкретный файл. Например, если пользователь открывает файл, сохраненный последней версией VSPackage, средство запуска может запустить VSPackage в соответствующей версии Visual Studio. Кроме того, пользователь может настроить средство запуска, чтобы всегда запускать последнюю версию. Средство запуска также может предложить пользователю обновить формат файла. Если формат файла содержит номер версии, средство запуска может сообщить пользователю, является ли формат файла версией более одной или нескольких установленных VSPackage.

    Средство запуска должно находиться в компоненте установщика Windows, который используется для всех версий VSPackage. Этот процесс гарантирует, что последняя версия всегда установлена и не удаляется до удаления всех версий VSPackage. Таким образом, сопоставления файлов и другие записи реестра компонента средства запуска сохраняются даже в том случае, если удаляется одна версия VSPackage.

Удаление и сопоставления файлов

Удаление VSPackage, записывающее записи реестра для сопоставлений файлов, удаляет сопоставления файлов. Поэтому расширение не имеет связанных программ. Установщик Windows не восстанавливает записи реестра, добавленные при установке VSPackage. Ниже приведены некоторые способы исправления сопоставлений файлов пользователя.

  • Используйте общий компонент средства запуска, как описано ранее.

  • Указать пользователю выполнить восстановление версии VSPackage, которую пользователь хочет владеть ассоциацией файлов.

  • Укажите отдельную исполняемую программу, которая переписывает соответствующие записи реестра.

  • Укажите страницу параметров конфигурации или диалоговое окно, позволяющее пользователям выбирать сопоставления файлов и удалять потерянные связи. Указать пользователям запускать его после удаления.