Установщик Wix: как создать ярлыки меню "Пуск" для Win7 и Win10 в одном и том же установочном пакете?

В меню "Пуск" для ярлыков в Win7 используется иерархическая структура, а в Win10 - плоская структура. Я ищу справку о том, как написать код в проекте установщика WIX, который создает иерархическую структуру ярлыков, если ОС Win7, и плоскую структуру, если ОС Win10.

В WIX ярлык меню "Пуск" определяется с использованием элемента Directory с идентификатором "ProgramMenuFolder" (например, см. Этот документ). Все статьи, которые я нашел, никогда не определяют этот элемент более одного раза. Каждый раз, когда я пытаюсь определить этот элемент дважды (например, внутри разных фрагментов, функций, компонентов), я получаю различные сообщения об ошибках, включая ошибку Candle "" Дублированный символ 'Directory:ProgramMenuFolder' found".

Мой вопрос: возможно ли, чтобы тот же установщик MSI, созданный в WIX, создавал иерархическую структуру ярлыков меню "Пуск" при установке на Win7, но структуру ярлыков с плоским меню при запуске на Win10? Если да, можете ли вы предоставить подробную информацию о коде WIX, который необходим для этого?

Thanx!

Ян

2 ответа

Это не связано с версией ОС.

Как ошибка Candle подразумевает, что вы пытаетесь установить "ProgramMenuFolder" каталог дважды в одном проекте.

Когда вы используете этот каталог внутри различных Фрагментов, Функций, Компонентов, попробуйте использовать атрибут каталога (directory = "ProgramMenuFolder").

Если вы хотите использовать его в качестве иерархической структуры, этот каталог должен находиться только в каталоге "TARGETDIR", то же самое для всех других предопределенных каталогов.

Это заняло некоторое время, но вот как я решил проблему. В Win7 с использованием установщика VS2010 ярлыки, добавленные моим установочным пакетом (т. Е. Файл MSI), были вложены следующим образом:

All Programs  
    CompanyName  
        ProductName  
            Version#
                App.exe  
                App.exe.config  
                App.pdf  

Проблема в том, что Win10 не поддерживает вышеуказанную иерархическую / вложенную структурированность. Лучшее, что вы можете получить, это плоская структура, такая как:

All Programs  
    Product Name - Version#  
        App.exe  
        App.exe.config  
        App.pdf  

Поэтому я хотел, чтобы мой установщик WIX использовал иерархическую / вложенную структуру ярлыков при установке на Win7, а затем, при установке на Win10, использовал плоскую структуру ярлыков. Это заняло некоторое время, но я смог заставить что-то работать, используя два элемента FEATURE, каждый со своим собственным элементом CONDITION. Первая функция FEATURE использовала иерархическую структуру ярлыков стартового меню для Win7 и более ранних ОС. Во второй ОСОБЕННОСТИ использовалась структура ярлыков в меню "Пуск" для ОС Win8 и более поздних версий. Короче говоря, первый элемент FEATURE установил "LEVEL=0", а затем использовал элемент CONDITION, чтобы установить "LEVEL=1", только если ОС была Win7 или более ранней. Аналогично, второй элемент FEATURE установил "LEVEL=0", а затем использовал элемент CONDITION для установки "LEVEL=1), только если ОС была Win8 или новее. У этого решения все еще было несколько проблем, которые нужно исправить, слишком много времени, чтобы разобраться в этом, и в конце концов я выбрал его для более простого решения.

Я пытался адаптировать процесс установки Win7 к Win10, и это вызывало проблемы с ярлыками в меню "Пуск". Решение состояло в том, чтобы полностью изменить мое мышление и вместо этого адаптировать процесс установки Win10 к Win7. В частности, очень легко запрограммировать WIX для установки плоской структуры ярлыков меню "Пуск", навязанной Win10. Эта плоская структура ярлыков меню "Пуск" также будет работать с Win7 и более ранними ОС. Поэтому мое решение состояло в том, чтобы просто использовать одинаковую структуру ярлыков меню "Пуск" для всех поддерживаемых операционных систем.

Рассказ о горе от того, кто только начал изучать WIX:):):)

Ян

Другие вопросы по тегам