Шаблон для обновления wix без изменения значков пользователей на рабочем столе.

Настройка Wix, над которой я работаю, спрашивает пользователя, следует ли установить ярлык из основной программы на рабочий стол.

Проблема в том, что во время обновления ярлык удаляется, а затем создается заново:

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

Есть ли простой способ правильно справиться с этой ситуацией?

Ниже приведена информация о моей настройке Wix:

Установка на машину

Пользователи выбирают установку ярлыка на рабочем столе с помощью флажка, добавленного в модифицированную версию «Выбрать пункт назначения»:

<Control Id="DesktopShortcutCheckBox" Type="CheckBox" X="20" Y="160" Width="290" Height="17" Property="INSTALLDESKTOPSHORTCUT" CheckBoxValue="[INSTALLDESKTOPSHORTCUT]" Text="!(loc.InstallDirDlgCreateDesktopShortcut)" />

В теге пользовательского интерфейса у меня инициализировано свойство:

<Property Id="INSTALLDESKTOPSHORTCUT" Value="1"/>

Это компонент для создания ярлыка с условием INSTALLDESKTOPSHORTCUT:

<Directory Id="DesktopFolder" Name="Desktop">
    <Component Id="desktopconnecteurdts" Guid="a-real-guid-here">
        <Condition>INSTALLDESKTOPSHORTCUT=1</Condition>
        <Shortcut Id="desktopconnecteurdts" Name="DTS eXplorer" WorkingDirectory="ApplicationFolder" Icon="DTSeXplorer.exe" Target="[ApplicationFolder]\DTSeXplorer.exe" Advertise="no" />
    </Component>
</Directory>

После запуска программа установки проверит, существует ли более старая версия, и удалит старую версию, если она будет найдена:

<Upgrade Id="$(var.UpgradeCode)">
    <UpgradeVersion OnlyDetect="no"
                    Property="PREVIOUSVERSIONSINSTALLED"
                    Minimum="$(var.OldProductVersion)"
                    IncludeMinimum="yes"
                    Maximum="$(var.ProductVersion)"
                    IncludeMaximum="no" 
                    RemoveFeatures="all" />
    <UpgradeVersion OnlyDetect="yes" Property="PROJECT_DOWNGRADE"
                    Minimum="$(var.ProductVersion)" IncludeMinimum="no" />
</Upgrade>

Основная версия продукта не меняется, например, я обновляюсь с 1.6.8.12345 до 1.7.2.56789.

Спасибо !


person Sébastien Nussbaumer    schedule 12.04.2012    source источник
comment
Вы нашли решение для ярлыка на рабочем столе?   -  person Andreas    schedule 14.08.2014
comment
@Andreas: Для местоположения: нет, оно сбрасывается при каждом обновлении.   -  person Sébastien Nussbaumer    schedule 14.08.2014


Ответы (2)


Запишите значение INSTALLDESKTOPSHORTCUT в реестр во время установки. Всякий раз, когда ваш установщик запускается, вы можете прочитать реестр и, если этот ключ существует, установить его как значение по умолчанию для этого свойства.

Однако не уверен, что вы можете что-то сделать с расположением ярлыка на рабочем столе.

person BryanJ    schedule 12.04.2012
comment
Я так и думал, я искал что-то более простое (может быть, встроенное)... - person Sébastien Nussbaumer; 13.04.2012
comment
Ничего не мог сделать с расположением ярлыка, но пошел по маршруту реестра, чтобы запомнить состояние флажка. Я рекомендую следующее чтение, которое предоставляет решение, которое охватывает все случаи: robmensching.com/blog/posts/2010/5/2/ - person Sébastien Nussbaumer; 16.04.2012

Вы можете сохранить и восстановить настройки ярлыка, используя только wix.

Ваша собственность должна выглядеть так.

<Property Id="INSTALLDESKTOPSHORTCUT" Value="1" Secure="yes">
  <RegistrySearch Id="Reg64" Root="HKLM" Win64="yes" Key="Software\$(var.ProductCompany)" Name="CreateDesktopShortcut" Type="raw"></RegistrySearch>
  <RegistrySearch Id="Reg32" Root="HKLM" Win64="no" Key="Software\$(var.ProductCompany)" Name="CreateDesktopShortcut" Type="raw"></RegistrySearch>
</Property>

Два «RegistrySearch» предназначены только для 32-битного и 64-битного установщика, если вы используете только 32-битный, вы можете удалить один из них.

И в вашей корневой папке добавьте это.

<Component Permanent="yes" Id="RegistryEntries" Guid="YOUR_GUID">
  <RegistryKey Root="HKLM" Key="Software\$(var.ProductCompany)" Action="create">
    <RegistryValue Type="integer" Name="CreateDesktopShortcut" Value="[INSTALLDESKTOPSHORTCUT]" />
  </RegistryKey>
</Component>
person shriek    schedule 14.04.2012