Как регистрировать типы файлов / расширения с помощью установщика WiX?

Я не нашел явного ответа на этот вопрос в документации WiX (или Google, если на то пошло). Конечно, я могу просто написать соответствующие ключи реестра в HKCR, но это заставляет меня чувствовать себя грязным, и я ожидаю, что это будет стандартная задача, которая должна иметь хорошее решение по умолчанию.

Для бонусных очков я хотел бы знать, как сделать его «безопасным», т. Е. Не перезаписывать существующие регистрации для типа файла и удалять регистрацию при удалении, только если он был зарегистрирован во время установки и не изменился.

    К сожалению, нет никакой возможности сделать «безопасную» связь с установщиком Windows.

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

    С Vista появился новый интерфейс «по умолчанию», снова вы все записываете в реестр. Вот полный пример, который мы используем в нашем установщике. (WiX 3.0)

    Обновление: прошло 12 месяцев с момента моего первоначального ответа, и у меня есть лучшее понимание ассоциаций файлов. Вместо того, чтобы писать все вручную, я теперь использую правильные определения ProgId которые улучшают обработку рекламируемых пакетов. См. Обновленный код, отправленный в ответ на этот вопрос .

                                 

    После некоторых дополнительных исследований я нашел частичный ответ на этот вопрос в учебнике WiX . Он показывает рекламируемое решение и не работает с WiX 3.0, но, учитывая эту информацию, я понял это. Добавьте элемент ProgId к компоненту, содержащему ваш исполняемый файл, например:

          

    myext – это расширение файла без точки, а MyApplication.exe – это идентификатор файла (не имя) исполняемого файла (т. е. атрибут Id элемента File). Это приведет к регистрации типа файла с вашим исполняемым файлом и предоставит значок по умолчанию (белая страница с иконкой приложения на нем), что достаточно для моих нужд. Если вы хотите указать выделенный значок, кажется, вам все равно нужно сделать это самостоятельно, как и следующее (код из связанного учебника):

        

    Однако я не нашел хорошего решения для моего бонусного вопроса.

    Изменить: я начал писать это до того, как пришел предыдущий ответ. Однако мое решение действительно работает, в отличие от предыдущего ответа.

    «Если ваше приложение обрабатывает свой собственный тип данных файла, вам необходимо зарегистрировать для него ассоциацию файлов. Поместите ProgId внутри вашего компонента. FileId должен ссылаться на атрибут Id элемента File, описывающий файл, предназначенный для обработки файлов этого Обратите внимание на восклицательный знак: он вернет короткий путь к файлу вместо длинного:

          

    Ссылка: http://wix.tramontana.co.hu/tutorial/getting-started/beyond-files

    Interesting Posts

    Создайте архив из каталога без добавления имени каталога в архив

    В чем разница между переопределением и новыми ключевыми словами в C #?

    Как сравнить две переменные объекта в языке выражений EL?

    Проблема с кодировкой изображений Twitter

    Выберите весь текст внутри EditText, когда он получит фокус

    Параметры запроса URL-адреса в Java

    Почему значения cookie с пробелом поступают на стороне клиента с кавычками?

    Есть ли способ указать, сколько символов строки будет распечатываться с помощью printf ()?

    Как создать веб-галерею в офлайн-режиме? (Без php на сервере)

    Windows 7 застрял на CLASSPNP.SYS

    Зачем использовать ReentrantLock, если вы можете использовать синхронизированный (это)?

    Отключить прокрутку ListView, содержащегося в ScrollView

    Как наследовать конструкторы?

    различия между использованием wmode = “transparent”, “opaque” или “window” для встроенного объекта на веб-странице

    Клавиши F1-12 для ноутбуков HP, перевернутые с помощью Fn

    Давайте будем гением компьютера.