Как сохранить ярлык на панели задач во время обновления?

У меня следующая ситуация.

Мой продукт устанавливает двоичные файлы внутри c:\Program Files (x86)\MyCompany\MyApp\ и ярлык под C:\ProgramData\Microsoft\Windows\Start Menu\Programs\MyCompany.

Я создаю msi, используя этот замечательный пример: https://helgeklein.com/blog/2014/09/real-world-example-wix-msi-application-installer/

Я только что добавил следующий фрагмент кода

  <!-- ApplicationShortcut-->
  <Directory Id="ProgramMenuFolder">

    <Directory Id="ApplicationProgramsFolder" Name="!(loc.ManufacturerName)">

      <Component Id="ApplicationShortcut" Guid="F4B7EAFA-FF19-41B4-8267-3AEFC12235A7">
        <Shortcut Id="ApplicationStartMenuShortcut"
             Name="!(loc.ApplicationName)"
             Description="!(loc.ProductDescription)"
             Target="[INSTALLDIR]MyApp.exe"
             WorkingDirectory="INSTALLDIR"
    />
        <RemoveFolder Id="RemoveApplicationProgramsFolder" Directory="ApplicationProgramsFolder" On="uninstall"/>
        <RegistryValue Root="HKCU" Key="Software\!(loc.ManufacturerName)\!(loc.ApplicationName)" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
      </Component>

    </Directory>

  </Directory>

Проблема в следующем

  • Я устанавливаю приложение в первый раз, оно отлично установит ярлык
  • Теперь я запускаю приложение и выбираю Pin to taskbar, this will create a shortcut inC:\Users\\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar`
  • Если я перестрою msi и снова выполню настройку, ярлык на панели задач больше не будет доступен для кликов, потому что ярлык в C:\Users\<user>\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar отсутствует

Можно ли сохранить ярлык на панели задач во время обновления?


person Jürgen Steinblock    schedule 07.12.2018    source источник
comment
Произойдет ли это, если установленный MSI является незначительным обновлением, а не основным? Как насчет рекламируемых и нерекламируемых ярлыков? Я никогда не пробовал, может быть, вы знаете навскидку.   -  person Stein Åsmul    schedule 07.12.2018


Ответы (1)


Я нашел ответ здесь: https://stackoverflow.com/a/33402698/98491

<InstallExecuteSequence>
  <RemoveShortcuts>Installed AND NOT UPGRADINGPRODUCTCODE</RemoveShortcuts>
</InstallExecuteSequence>

Это предотвращает удаление ярлыков во время обновления.

Как описано в комментариях, недостатком является то, что после удаления TaskBarShortCut остается, но это то, чего может ожидать пользователь. Необходимость воссоздавать закрепленный ярлык на панели задач каждый раз, когда он обновляет программное обеспечение, - нет.

person Jürgen Steinblock    schedule 10.12.2018
comment
Я бы протестировал это как следует. Если этот ярлык рекламируется, он указывает на функцию продукта, а не на файл. Это может сработать, а может и нет. Протестировать полное крупное обновление с закреплением и без него? - person Stein Åsmul; 12.12.2018
comment
Может быть, но у меня нет рекламируемых ярлыков. Пробовал обновить с 1.8 до 1.9 и все заработало. Я попробую обновить до 2.x и удалить, а также обновить ответ, если это не удастся. - person Jürgen Steinblock; 12.12.2018
comment
Ладно, просто пытаюсь предупредить тебя. Windows — движущаяся цель для всех нас. Поведение, от которого мы зависим, иногда внезапно меняется. Однако нерекламируемый ярлык действительно указывает на файл (как правило, если это не сделано). - person Stein Åsmul; 12.12.2018
comment
A non-advertised shortcut does point to a file though Что ты имеешь в виду? В качестве цели или KeyPath? Я использую тепло, чтобы собрать свои файлы в компонент, поэтому я не могу поместить ярлык внутри тега файла, но использование Target="[INSTALLDIR]MyApp.exe" работает нормально. - person Jürgen Steinblock; 12.12.2018