Удалить компонент с в следующем обновлении в 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) в следующем обновлении.
Как я могу удалить его, мне нужно написать собственное действие?
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ:: Пожалуйста, найдите ответы,
У mysvc есть какая-то сторонняя библиотека lib зависимости от конкретных Win7 и Win8, она работает означает, что она успешно установлена, если мы проверим sc qc mysvc, я получаю сервис, и mysvc.exe сопоставлен с сервисным binpath
да, эти два сервисных компонента нацелены на одно и то же место, и есть только один компонент, когда я делаю запрос sc mysvc
- Нет там только одной записи сервиса. 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 и не должны копироваться и использоваться! Это очень важно:-).