Установщик WiX удаляет ярлык при обновлении

Я использую WiX Toolkit v3.11 для создания настроек моего программного обеспечения. Во время установки я создаю ярлыки стартового меню со следующим кодом:

<Shortcut Id='startmenuMyProgram'
          Name='$(var.MyProgramName)'
          Directory='ProgramMenuFolder'
          WorkingDirectory='APPLICATIONFOLDER'
          Advertise='yes'
          Icon='icon.exe'>
  <Icon Id='icon.exe' SourceFile='$(var.Setuppath)\MyProgram.exe'/>
</Shortcut>

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

<Component Id="removeStartmenuShortcuts" Guid="803ad14a-feab-4901-b9db-2c4a1298ae8b">
  <Condition>(REMOVE=ALL) AND NOT (WIX_UPGRADE_DETECTED OR UPGRADINGPRODUCTCODE)</Condition>

  <RemoveFile Id="remove_startmenuProgram1" Name="startmenuMyProgram" On="uninstall" />
  <RemoveFile Id="remove_startmenuProgram2" Name="startmenuMyProgram2" On="uninstall"/>
  <RemoveFile Id="remove_startmenuProgram3" Name="startmenuMyProgram3" On="uninstall"/>
</Component>

Это работает без проблем при удалении программного обеспечения. Но ярлыки также удаляются при выполнении обновления. Но я хочу предотвратить это поведение, но условие, кажется, не работает. Поэтому все ярлыки, такие как на панели задач Windows, удаляются при обновлении.

Как я могу заставить мой прогресс обновления работать правильно?

Вот поведение после обновления:

Поведение при обновлении

Группа со всеми ярлыками справа отсутствует!

1 ответ

Вы можете объединить 2 компонента. При этом вам не нужно будет использовать операторы условия.

Значение реестра должно указывать путь к ключу для компонента.

  <Component Id="cmpstartmenuMyProgram" Guid="{67CB4F7A-5028-4697-A47F-DE99110B9645}">
    <Shortcut Id="Shortcut.ApplicationName"
              Name="ApplicationName"
              Target="[INSTALLDIR]ApplicationName.exe"
              WorkingDirectory="INSTALLDIR"
              Directory="StartMenuFolder"
              Icon="Icon.exe"/>
    <RemoveFile Id="RemoveStartMenuShortcut.ApplicationName" Name="ApplicationName" Directory="StartMenuFolder" On="uninstall"/>
    <RegistryValue Root="HKCU" Key="Software\Compony\ComponyName" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
  </Component>
Другие вопросы по тегам