Казалось бы ярлык - такая простая вещь, содается двумя-тремя кликами мышки, кроме открытия файла особо ничего не делает. Но вот чтобы создать такую простую вещь в инсталляторе написанном на Wix необходимо учитывать несколько моментов, которые в самом злостном случае способны отнять кучу времени в бесплодных поисках. В основном вся загвоздка кроется в аттрибуте Advertise тега . Опуская подробности, о ярлыках с установленным Advertise="yes" можно сказать то, что они запускают файлы, которые установлены как KeyPath для текущего компонента. KeyPath, в свою очередь определяет тот элемент, по которому определяется присутствие компонента в системе(по-умолчанию - первый файл в списке компонента). Таким образом напрашиваются несколько выводов:
- для advertised ярлыков неприменимо использование атрибута Target, которой указывает на вызываемый файл.
- для вызова нужного файла ему необходимо установить атрубут KeyPath="true" или переместить в начало списка.
- тег должен обязательно находиться в том же компоненте, что и вызываемый файл, для физического помещения ярлыка в другую папку необходимо использовать атрибут Directory.
Если все эти моменты нам не подходят и выбор падает на ярлыки с атрибутом Advertise="no", то мы просто добавляем значение атрибута Target, указывающего на нужный файл. И, в случае если ярлык и файл в одной папке где-нибудь на диске и атрибут Directory не задействован, то все будет работать отлично. Ошибки полезут, если мы ярлык пожелаем положить в какое-либо более удобное место - на рабочий стол или в меню программ, например.
Выглядеть они будут примерно так:
error LGHT0204: ICE43: Component- в случае, если мы для размещения ярлыка используем атрибут Directory.has non-advertised shortcuts. It should use a registry key under HKCU as its KeyPath, not a file.
error LGHT0204: ICE57: Componenthas both per-user and per-machine data with a per-machine KeyPath.
error LGHT0204: ICE18: KeyPath for Component:is Directory: 'DesktopFolder'. The Directory/Component pair must be listed in the CreateFolders table.
error LGHT0204: ICE38: Componentinstalls to user profile. It must use a registry key under HKCU as its KeyPath, not a file.
error LGHT0204: ICE43: Componenthas non-advertised shortcuts. It should use a registry key under HKCU as its KeyPath, not a file.