Удалить компонент с в следующем обновлении в WiX

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

<Component Id="MyServiceWin7" Guid="{GUID_WIN7}">
<File Id="mysvc_Win7"
      Name="mysvc.exe"
      Source=mysvc.exe"
      KeyPath = "yes"/>
<ServiceControl Id="MYSVC_Win7"
                Name="MYSVC"
                Remove="uninstall"
                Start="install"
                Stop="both"
                Wait="no" />
<ServiceInstall Id="My_Svc_Win7"
                Name="MYSVC"
                DisplayName="MYSVC"
                Type="ownProcess"
                Start="auto"
                ErrorControl="normal"
                LoadOrderGroup=""
                Description="My service">
</component>

<Component Id="MyServiceWin8" Guid="{GUID_WIN8}">
<File Id="mysvc_Win8"
      Name="mysvc.exe"
      Source=mysvc.exe"
      KeyPath = "yes"/>
<ServiceControl Id="MYSVC_Win8"
                Name="MYSVC"
                Remove="uninstall"
                Start="install"
                Stop="both"
                Wait="no" />
<ServiceInstall Id="My_Svc_Win8"
                Name="MYSVC"
                DisplayName="MYSVC"
                Type="ownProcess"
                Start="auto"
                ErrorControl="normal"
                LoadOrderGroup=""
                Description="My service">
</component>

Таким образом, будет два экземпляра компонента MYSVC. Оба сопоставляются с MYSVC.exe.

Я пропустил проверку состояния версии ОС в предыдущем выпуске.

Работает успешно.

Я думаю об удалении фиктивного дополнительного COMPONENT (GUID_Win7 или GUID_WIN8) в следующем обновлении.

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

Любая помощь будет оценена.

РЕДАКТИРОВАТЬ:: Пожалуйста, найдите ответы,

  1. У mysvc есть какая-то сторонняя библиотека lib зависимости от конкретных Win7 и Win8, она работает означает, что она успешно установлена, если мы проверим sc qc mysvc, я получаю сервис, и mysvc.exe сопоставлен с сервисным binpath

  2. да, эти два сервисных компонента нацелены на одно и то же место, и есть только один компонент, когда я делаю запрос sc mysvc

  3. Нет там только одной записи сервиса. mysvc.exe - это версия win8 на диске.

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

В настоящее время у меня есть общий путь%ProgramFiles%\MyApp\mysvc.exe для win 7 и win8. Так что мой вопрос, если создать новый общий путь, чтобы разорвать предыдущую ссылку. ProgramFiles%\MyApp\mysvc\mysvc.exe [[NEW_GUID1]] для win7 ProgramFiles%\MyApp\mysvc\mysvc.exe [[NEW_GUID2]] для win8

Компоненты с [[OLD_GUID1]], [[OLD_GUID2]] будут находиться в системе навсегда, пока мой продукт не будет удален, поэтому мы не можем просто удалить компоненты с [[OLD_GUID1]], [[OLD_GUID2]] для очистки устаревших (не функциональных) компонентов

Спасибо

1 ответ

Некоторые вопросы:

  • Прежде всего, можем ли мы спросить, почему вы решили установить сервис в двух вариантах? Значит ли это, что у сервиса разные бинарные файлы для Win7 и Win8? Если так, то непонятно, почему вы говорите, что оно работает так, как оно есть.
  • Эти сервисные компоненты предназначены для двух разных мест установки, чтобы они работали бок о бок, или вы используете один и тот же целевой объект назначения с обоими компонентами? (так что после установки есть только один экземпляр файла).
  • Есть ли две записи в списке услуг на коробке после установки? Если вы нацелены на одно и то же местоположение с обоими компонентами, какая версия файла mysvc.exe сделал это на диск? (если они разные).

Я написал ниже перед вышеупомянутыми вопросами. Пожалуйста, обновите ваш вопрос с ответами на вопросы. Ниже может быть неуместно - нам нужно больше информации.


Грехи прошлого: если в предыдущей версии вы дважды установили один и тот же файл с двумя разными идентификаторами GUID компонентов, то это неправильно, и я бы порекомендовал вам "разорвать связь" с грехами прошлого, установив два новых GUID компонентов для новый выпуск и, что особенно важно: установить новое абсолютное место установки для каждого компонента (не указывайте один и тот же путь абсолютного ключа с двумя разными идентификаторами GUID! - условия или нет).

Идея состоит в том, чтобы удалить старые и новые версии так, чтобы вы начали с чистого листа.

Что-то вроде:

Comp 1: {77777777-7777-7777-7777-777777777777}, [ProgramFilesFolder]My App\Win7\mysvc.exe

Comp 2: {42424242-4242-4242-4242-424242424242}, [ProgramFilesFolder]My App\Win8\mysvc.exe

Лично я хотел бы избежать номера версии Windows и, возможно, использовать что-то еще. Как насчет года?

Comp 1: {77777777-7777-7777-7777-777777777777}, [ProgramFilesFolder]My App\2007\mysvc.exe

Comp 2: {42424242-4242-4242-4242-424242424242}, [ProgramFilesFolder]My App\2014\mysvc.exe

Просто чтобы не жестко кодировать вводящее в заблуждение значение, если версия Win8 работает, например, на Win10.

NB!: Обратите внимание, что приведенные выше примеры GUID являются общеизвестными и нефункциональными GUID и не должны копироваться и использоваться! Это очень важно:-).

Другие вопросы по тегам