Как заставить Windows Installer заменить ярлык с переименованным?

StackOverflow https://stackoverflow.com/questions/4622205

  •  30-09-2019
  •  | 
  •  

Вопрос

Недавно мы добавили функцию нашего установщика, которая требовала пару ярлыков настольных компьютеров, которые нужно незначительно переименовать (номер версии был добавлен на имя). У меня проблемы с получением установщика для замены старых ярлыков новыми. Когда проблема была первоначально сообщена, устанавливаются новые ярлыки, но старые не были удалены. После работы над проблемой у меня смешанная проблема: одна из старых ярлыков удаляется (до сих пор, так хорошо), но другой не (не так хорошо), и в обоих случаях новые ярлыки не устанавливаются (даже хуже). Я попытался изменять GUID на каждом из компонентов, которые устанавливают эти ярлыки, и я даже в одной точке попробовал изменение свойства ProductCode в каждом из модулей слияния, отвечающих за ярлыки, но ничто не получает желаемого поведение (снаружи со старым и в новом при модернизации).

Благодаря реконструкции соответствующих компонентов вот в чем отображается файл журнала для состояний установки (чтобы помочь с отладкой, я переименовал несколько компонентов, чтобы я мог сказать, какие из них из старого сборки, и которые имеют новый):

...
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local;   Request: Absent;   Action: Absent
...
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local;   Request: Absent;   Action: Null
...

Как вы можете видеть в журнале, новые ярлыки должны идти в обоих случаях, но нет. И я втересь, чтобы объяснить, почему установщик делает разные вещи с двумя старыми ярлыками.

FYI: My Dev Environment - WIGE BOCE STUDIO 7.0.

Редактировать: Я сбросил все к тому, что он был ранее, за исключением текущей продукции и продукта и продуктакода. Сделав это, установщик оставляет старые ярлыки, но не устанавливает новые. (Это другое поведение из того, что изначально сообщалось, и который я смог дублировать, то есть старые ярлыки были установлены, а новые (переименованные) были установлены также.) После перенаправления двух соответствующих компонентов установщик Удаляет старые ярлыки, но все равно не устанавливает новые. (Это то, что происходит на XP.)

Соответствующие линии в журнале после перенаправления компонентов следующие:

...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local;   Request: Absent;   Action: Absent
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local;   Request: Absent;   Action: Absent
...

Первые две строки, кажется, указывают на то, что новые ярлыки устанавливаются, и все же они не являются. Ремонт после этого установят новые ярлыки.

Когда копия установщика, в которой существует исходная задача (как старые, так и новые ярлыки после обновления), может быть дублирована, является запущенным, действие, указанное в последних двух строках выше, является NULL вместо отсутствующим.

Редактировать 2: Текущее поведение заключается в том, что старые ярлыки остаются установленными, а новые не установлены. Когда я восстанавливаю свои компоненты, старые ярлыки удаляются, а новые все еще не устанавливаются. Я попробовал решения Christopher Haperer, но ни нигде не пошел. (См. Мой комментарий к этому ответу.) Должен быть способ получить новые версионные ярлыки, установленные на месте старых неверсившихся. Есть ли кто-нибудь там может обеспечить решение, которое работает?

Редактировать 3: Как оказывается, новое поведение, в котором новые ярлыки не были установлены, было связано с ошибкой, которую я сделал в получении исходных файлов, а те, которые вошли в установщик, не так, как те, что которые должны были быть заменены. Как только самые современные файлы были скомпилированы в установщик, я смог получить желаемые результаты (старые ярлыки, новые). (См. Мой ответ для получения дополнительной информации.)

Это было полезно?

Решение 2

Когда мы переосмыслием все для каждого оборота (номер сборки всегда увеличивается), это главное обновление, насколько Wi касается, поэтому, как только я получил максимальную доступ к файлам установки, регулируя компоненты, которые содержат рабочий стол Ярлыки, которые необходимы для замены, достигнуты результаты, которые я был после.

Другие советы

Ярлык - это просто файл .lnk в каталоге. Вы не переименуете ярлык, вы его удалите и создаете новый. Если вы сделаете серьезное обновление, удаление / переустройство должно обрабатывать это, но если вы выполняете второстепенное обновление, это оставит старый позади, потому что новый MSI не знает об этом.

Две возможности:

1) Используйте таблицу RemoveFile, чтобы избавиться от старого ярлыка.

2) Держите старый компонент со старым файлом и используйте переходный атрибут с условием NO-OP (Google Как удалить файл в незначительном обновлении компонента компонента AKA), чтобы привести к удалению компонента, и его файл / ярлык. Создайте новый компонент с новым именем файла и новым ярким именем для получения нового ярлыка.

Я думаю, что я попробую # 1 первым. :-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top