Wix - не удалять прикрепленную панель задач при установке

Во время установки или основного обновления, если пользователь привязал приложение к своей панели задач, после завершения установки ярлык панели задач удаляется из \AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar и значок пустого файла (см. Ссылку на изображение ниже) оставлены на своем месте. Щелчок по значку подскажет пользователю удалить, поскольку он не нацелен на что-либо.

http://i.stack.imgur.com/kz1zW.png

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

Возможно ли это? Я читал об изменении значения для RemoveExistingProducts (т.е. Смены с InstallValidate на InstallFinalize), но я не уверен, что это будет жизнеспособно.

Спасибо.

Ответ 1

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

В качестве обходного пути мы сделали следующее:

  • Отключено стандартное действие RemoveShortcuts с использованием следующего кода WiX:

    <InstallExecuteSequence>
      <RemoveShortcuts>0</RemoveShortcuts>
    </InstallExecuteSequence>
    
  • Добавлена ​​явная запись <DeleteFile> для каждого ярлыка, который мы устанавливаем. Например:

    <DirectoryRef Id="ProgramMenuDir">
      <Component Id="Component" Guid="B7469BFC-BF2A-4AF7-9DF5-3458BB485F18">
        <Shortcut Id="Shortcut" Name="My Supper App"
                  Directory="ProgramMenuDir" Target='MyApp.exe' />
        <RemoveFile Id="RemoveShortcut"
                    Name="My Supper App.lnk"
                    On="uninstall" />
      </Component>
    </DirectoryRef>
    

Кажется, он работает нормально.

Ответ 2

Вы можете избежать пользовательских действий, отключив стандартные RemoveShortcuts следующим образом:

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

Отключает удаление ярлыков, кроме удаления.

Ответ 3

Я не уверен, что вы можете сделать, чтобы это не произошло, но это может помочь вам, по крайней мере, заменить его. Этот метод использует logon script, но вы должны иметь возможность реализовать это с помощью wix

Значки, прикрепленные к панели задач Windows 7, хранятся в следующих местах

Файловая система:% APPDATA%\Microsoft\Internet Explorer\Быстрый запуск\Пользователь Возлагали \TaskBar

Реестр: [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband] Чтобы развернуть его, вы можете выполнить следующие шаги:

  • Настроить элементы, закрепленные в системе Windows 7, в качестве эталонного компьютера.
  • Экспорт ключа Reigstry в файл pinned.reg: [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband] И скопируйте элементы в "% APPDATA%\Microsoft\Internet Explorer\Quick Запустите \User Pinned\TaskBar" в общую папку.

  • Создайте logon script, чтобы развернуть разделы реестра и скопировать соответствующие файлы. Обратите внимание, что Msgstr "% APPDATA%\Microsoft\Internet Explorer\Быстрый запуск\Пользователь закреплен" папка создается только после того, как пользователь привязал значок к панели задач. При входе в систему script вам нужно будет создать "% APPDATA%\Microsoft\Internet Explorer\Быстрый запуск\Пользователь Pinned\TaskBar", если он не существует.

Источник: http://social.technet.microsoft.com/Forums/windowsserver/en-US/d172b4de-be7c-4149-8958-bebfe042ade1/forum-faq-how-to-deploy-windows-7-taskbar-pinned-icons-by-group-policy?forum=winserverGP