2009-11-12 2 views
3

Я создаю обновляемый установщик с помощью WiX, который должен полностью удалить существующую программу перед установкой новой версии. У меня есть обновление файлов и добавление новой версии, но у меня осталось 2 экземпляра программы на экране «Установка и удаление программ». Ниже приведен пример того, как я пытаюсь удалить все.2 экземпляра программы после обновления с помощью WiX

<Product Id="064e9bca-dcf5-412d-9a8f-dafec3bd3406" Name="testInstall" Language="1033" Version="1.0.14" Manufacturer="testInstall" UpgradeCode="5dd5747f-c598-4133-8c7d-252ae3dee8a5"> 

<Package InstallerVersion="301" InstallPrivileges="elevated" InstallScope="perMachine" Compressed="yes" /> 

<Upgrade Id="5dd5747f-c598-4133-8c7d-252ae3dee8a5"> 
    <UpgradeVersion Minimum="1.0.0" 
        IncludeMinimum="yes" 
        Maximum="1.0.13" 
        OnlyDetect="no" 
        Property="OLDERVERSIONBEINGUPGRADED" /> 
</Upgrade> 

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallInitialize"/> 
</InstallExecuteSequence> 

Любая помощь, которая может быть оказана, будет оценена по достоинству.

ответ

5

Everytime вы хотите создать новый обновленный пакет, изменить как ProductVersion и ProductGUI:

<?define ProductVersion="1.0.76"?> 
<?define ProductGUI="945C22A0-BB37-4F7D-9B28-2F02491A0698"?> 

<Upgrade Id="b14563a6-db4f-451c-8b9d-03e480687290"> 
    <UpgradeVersion OnlyDetect='yes' Property='NEWERVERSIONDETECTED' Minimum='$(var.ProductVersion)' IncludeMinimum='no' /> 
    <UpgradeVersion Minimum="1.0.0" IncludeMinimum="yes" Maximum="$(var.ProductVersion)" Property="OLDERVERSIONBEINGUPGRADED" /> 
</Upgrade> 

... 

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallValidate" /> 
    ... 
</InstallExecuteSequence> 

ПРИМЕЧАНИЕ: Используйте свой собственный идентификатор GUID для обновления/Id, конечно.

+1

Спасибо, что вы подтвердили мою теорию. Одна вещь, которую я обнаружил, заключалась в том, что один из файлов не удалялся из старой версии, когда предполагалось. Вы знаете какую-либо причину, по которой файл зависает, когда все остальные будут удалены? Я обнаружил, что это причина, поскольку она все еще привязана к старой версии, так что версия все еще была технически установлена. –

+0

Установщик Windows хранит счетчик для каждого файла, который установлен более чем одним MSI. Этот файл будет удален только тогда, когда счетчик вернется к 0, то есть когда обе MSI будут удалены. – Nestor

Смежные вопросы