Как вручную зарегистрировать ассоциации файлов ClickOnce после установки?

Система развертывания 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 при установке.

VS2010's ClickOnce File Association Manager

Я покопался в своем реестре и обнаружил несколько записей, сделанных установщиком ClickOnce для связывания типов файлов с развернутым приложением ClickOnce.

Пример раздела реестра для сопоставления типов файлов ClickOnce, который я нашел в моем реестре:

rundll32.exe dfshim.dll, ShOpenVerbExtension {ae74407a-1faa-4fda-9056-b178562cf98f}% 1

Где { ae74407a-1faa-4fda-9056-b178562cf98f} - это идентификатор GUID, используемый в нескольких других местах реестра для связанного приложения.

Моя цель - узнать, какую информацию необходимо добавить в реестр (программно), чтобы вручную связать файлы с развернутым приложением ClickOnce.

Любая помощь приветствуется!

44
задан Evan Wondrasek 10 May 2013 в 22:59
поделиться