Как заставить установщик Windows заменить ярлык на переименованный? - PullRequest
0 голосов
/ 07 января 2011

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

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

...
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
...

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

К вашему сведению: моя среда разработки - Wise Installation Studio 7.0.

Редактировать: Я сбросил все до того, что было ранее, за исключением текущего ProductVersion и ProductCode.После этого установщик оставляет старые ярлыки установленными, но не устанавливает новые.(Это поведение отличается от того, о чем первоначально сообщалось, и которое мне удалось воспроизвести, т. Е. Старые ярлыки были оставлены установленными, а также были установлены новые (переименованные).) После повторного НАПРАВЛЕНИЯ двух соответствующих компонентов программа установкиудаляет старые ярлыки, но не устанавливает новые.(Это то, что происходит в 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 вместо Absent.

Edit 2: В настоящее время поведение старых ярлыков остается установленным, а новые не устанавливаются.Когда я переопределяю их компоненты, старые ярлыки удаляются, а новые еще не устанавливаются.Я попробовал решения Кристофера Пейнтера, но никуда не делся.(См. Мой комментарий к этому ответу.) Должен быть способ установить новые версии ярлыков вместо старых неверсированных.Кто-нибудь может предложить решение, которое работает?

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

Ответы [ 2 ]

1 голос
/ 07 января 2011

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

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

2) Сохраните старый компонент вместе со старым файлом и используйте переходный атрибут с условием отсутствия операции (Google, как удалитьфайл в незначительном обновлении (он же шаблон проколотого компонента) для удаления компонента и его файла / ярлыка.Создайте новый компонент с новым именем файла и новым именем ярлыка, который будет установлен, чтобы получить новый ярлык.

Я думаю, что сначала попробую # 1.: -)

0 голосов
/ 15 февраля 2011

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

...