Система развертывания Microsoft ClickOnce предлагает простой в использовании менеджер ассоциаций файлов, который встроен в процесс развертывания Visual Studio ]. Разработчики могут добавить до 8 ассоциаций файлов, которые будут автоматически связаны с их приложением, когда пользователь запустит установщик ClickOnce.
Я бы хотел пойти еще дальше: Я хочу разрешить пользователям вручную добавлять или удалять дополнительные ассоциации файлов после установки из моего приложения.
У меня есть две мотивации для выполнения этого:
В отличие от традиционных приложений Windows, приложения ClickOnce не запускаются напрямую через их исполняемый файл. Вместо этого они запускаются через специальный ярлык .appref-ms
, который обрабатывает магию ClickOnce за кулисами (автоматические обновления, размещение исполняемых файлов в запутанном каталоге в % LOCALAPPDATA%
, так далее).
Если приложение, развернутое ClickOnce, открывается непосредственно через его исполняемый файл, автоматические обновления отключаются, и методы, специфичные для 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.
Любая помощь приветствуется!