Должен ли Windows Installer / компонент ярлыка MSI быть привязан к ключу / значению реестра? - PullRequest
0 голосов
/ 07 апреля 2020

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

<Component Id="cmpShortcut1">
    <RegistryValue Root="HKMU" Key="Software\Acme Inc\Foobar" Name="shortcut1" Type="integer" Value="1" />
    <Shortcut Directory="ProgramMenuFolder" Id="shortcut1" Name="Foobar" Target="[#filFoobarExe]" />
</Component>

Это то, что, как я вижу, делают большинство авторов пакетов. Я интерпретирую это так, как время жизни компонента ярлыка связано со временем жизни соответствующего значения реестра. Это правильная интерпретация? Это хорошая практика? Я мог бы удалить файл ярлыка с того места, где он был установлен, и если попытка установки исправить, простое присутствие значения «ярлык1» в реестре приведет к процедуре восстановления до go переустановки ярлыка, поскольку он считает, что он все еще установлен (что он знает, ища и находя значение реестра). Это не очень хорошо, не так ли?

Глубже копаясь во Windows Внутренних компонентах установщика, в частности в таблицах, которые он использует, и находя соответствующие элементы, аргументы и отношения в Wix, я также могу определить компонент ярлыка следующим образом :

<Component Id="cmpFoobarExe">
    <File Id="filFoobarExe" KeyPath="yes" Source="!(wix.SOURCEDIR)\mpc-hc64.exe">
        <Shortcut Directory="ProgramMenuFolder" Id="shortcut1" Name="Foobar" />
    </File>
</Component>

Теперь, насколько я понимаю, компонент теперь фактически привязан к самому файлу, а ярлык привязан к компоненту, в соответствии с документацией от Microsoft .

Приведенный выше вариант в дикой природе кажется гораздо более редким, чем первый подход, по-видимому, по той или иной причине.

Я должен добавить, возможно, очевидный момент, что два разных определения вызывают разные отношения в различных таблицах MSI.

Учитывая, как Windows Установщик, по-видимому, дает определенную степень свободы в отношении того, как осуществить установку ярлыков, каков консенсус в отношении того, как лучше всего это сделать - ярлыки были и остаются очень важными части любой установки, так что я думаю, можно надеяться, что это решенная проблема к настоящему времени? И в чем разница между этими подходами на практике, помимо тех последствий, которые мне уже удалось выделить?

Я не понимаю мудрости и логики c, стоящих за связыванием ярлыка со значением реестра в такой способ, где это даже не предпочтение - если значение в реестре могло бы быть осмысленно использовано для контроля или определения, должен ли ярлык быть установлен или должен быть установлен, это было бы что-то. Но как сейчас с WI, кажется, что это некая форма придатка, которая также является ограничением из-за того, как WI был разработан для работы с компонентами?

С другой стороны, второй подход не кажется предложить возможность установить целевой файл - исполняемый файл приложения, который обычно является обязательной функцией при любой установке, но без ярлыка. Это оба или нет? Это вряд ли замечательно - я бы хотел спроектировать пакет таким образом, чтобы установщики могли выбирать, например, хотят ли они ярлык на рабочем столе.

...