Microsoft Система развертывания ClickOnce предлагает простой в использовании менеджер ассоциаций файлов, который встроенный в процесс развертывания Visual Studio. Разработчики могут добавить до 8 ассоциаций файлов, которые будут автоматически связаны с их приложением, когда пользователь запускает установщик ClickOnce.
Я хотел бы сделать еще один шаг: Я хочу разрешить пользователям вручную добавлять или удалять дополнительные ассоциации файлов после установки из моего приложения.
У меня есть две мотивации для этого:
- Я не буду "принудительно" добавлять дополнительные ассоциации файлов для пользователя, так как обрабатываются ассоциации файлов с помощью развертываний ClickOnce.
- Пользователи могут добавлять или удалять свои собственные уникальные ассоциации файлов в свободное время.
Сложная часть: непосредственное связывание типа файла с исполняемым файлом несовместимо с развертываниями ClickOnce
В отличие от традиционных приложений Windows приложения ClickOnce не запускаются непосредственно через их исполняемый файл. Вместо этого они запускаются через специальный .appref-ms
ярлык, который обрабатывает волшебство ClickOnce за кулисами (автоматическое обновление, поиск исполняемых файлов в обфускационном каталоге в %LOCALAPPDATA%
и т.д.).
Если приложение, развернутое ClickOnce, открыто непосредственно через его исполняемый файл, автоматические обновления отключены, а методы ClickOnce больше не будут работать. Из-за этого традиционные ассоциации файлов реестра недоступны для моего использования.
Как Visual Studio обрабатывает ассоциации файлов ClickOnce
На приведенном ниже рисунке показан Visual Studio 2010 встроенный менеджер связей файлов ClickOnce. Эта информация хранится в файле .manifest приложения и добавляется в реестр Windows при установке.
Я проделал некоторый рыть через мой реестр и идентифицировал несколько записей, сделанных установщиком ClickOnce, чтобы связать типы файлов с развертываемым приложением ClickOnce.
Пример реестра для ассоциации файлов ClickOnce, найденной в моем реестре:
rundll32.exe dfshim.dll, ShOpenVerbExtension {ae74407a-1faa-4fda-9056-b178562cf98f} %1
Где {ae74407a-1faa-4fda-9056-b178562cf98f}
- это идентификатор GUID, используемый в нескольких других местах в реестре для соответствующего приложения.
Моя цель - узнать, какая информация должна быть добавлена в реестр (программно) для ручной привязки файлов с помощью развернутого приложения ClickOnce.
Любая помощь приветствуется!