2010-07-27 2 views
1

Я строю свой первый установщик WiX после того, как устал от вида Wise For Windows Installer!Получение установки для обновления с использованием WiX-старого установщика, созданного без использования WiX

Я построил установщик, и это работает отлично, но теперь мне нужно заставить его выполнить обновление с предыдущей версии моего приложения. Хотя я могу найти много сообщений о настройке WiX, выполняйте обновления, я не могу найти ничего, что подсказывало мне, как это сделать, когда у вас есть предыдущий установщик, сделанный с использованием другого инструмента.

Я делаю это так же? Нужно ли мне обновлять коды и т. Д. Из старого установщика? Спасибо заранее!

UPDATE:

инструкция Следующих Флетчера я получил UpgradeCode от старого установщика при помощи dark.exe и добавить его в UpgradeCode тега продукта. Начало моего файла WiX теперь выглядит таким образом ...

<Product Id="fcdc6617-e960-46db-8faa-1dc627f250c8" Name="MyProduct" 
     Language="1033" Version="1.2.0.5165" Manufacturer="MyCompany" 
     UpgradeCode="{E97A233B-AB49-4B66-B92A-68972F6D72B9}"> 

    <Package InstallerVersion="200" Compressed="yes" /> 

<!-- Upgrade from previous version(s) --> 
<Property Id="PREVIOUSVERSIONINSTALLED" Secure="yes" /> 
<Upgrade Id="{E97A233B-AB49-4B66-B92A-68972F6D72B9}"> 
    <UpgradeVersion Minimum="1.1.0.4605" Maximum="1.2.0.5165" 
        Property="PREVIOUSVERSIONINSTALLED" 
        IncludeMinimum="yes" IncludeMaximum="no" /> 
</Upgrade> 

... но теперь, когда я запускаю этот инсталлятор я в конечном итоге с двумя экземплярами MyProduct на целевой машине. Где я иду не так?

ответ

1

Наконец-то нашлось решение этим утром, спасибо всем, кто указал мне в правильном направлении (включая blog) DAVID GARDINER. Убедившись Upgrade код таким же, как и предыдущие установки, и что как код продукта изменился и номер версии был увеличен, здесь полным решение:

<Product Id="fcdc6617-e960-46db-8faa-1dc627f250c8" Name="$(var.ProductName)" 
     Language="1033" Version="$(var.Version)" Manufacturer="$(var.Manufacturer)" 
     UpgradeCode="$(var.UpgradeCode)"> 

<Package InstallerVersion="200" Compressed="yes" /> 
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" /> 

<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" /> 
<!-- without this next line the upgrade doesn't work! (not sure why?) --> 
<Property Id="ALLUSERS" Value="1" /> 

<Upgrade Id="$(var.UpgradeCode)"> 

    <UpgradeVersion Property='PREVIOUSVERSIONSINSTALLED' 
        OnlyDetect="no" IncludeMinimum='yes' 
        Minimum='1.1.0.4605' IncludeMaximum='no' 
        Maximum='$(var.Version)' /> 

    <UpgradeVersion Minimum="$(var.Version)" 
        IncludeMinimum="no" OnlyDetect="yes" 
        Language="1033" 
        Property="NEWERPRODUCTFOUND" /> 

</Upgrade> 

... 

<InstallUISequence> 

    <Custom Action="UIandAdvertised" Sequence="3"> 
    ProductState=1 
    </Custom> 

    <LaunchConditions After="AppSearch" /> 
</InstallUISequence> 

<CustomAction Id="PreventDowngrading" Error="Newer version of this product is already installed." /> 
<CustomAction Id="UIandAdvertised" Error="Something about the UI."/> 

<!-- Remove exist products before install --> 
<InstallExecuteSequence> 

    <Custom Action="PreventDowngrading" After="FindRelatedProducts"> 
    NEWERPRODUCTFOUND AND NOT Installed 
    </Custom> 

    <LaunchConditions After="AppSearch" /> 
    <RemoveExistingProducts Before="InstallInitialize" /> 
</InstallExecuteSequence> 
</Product> 
2

Похоже, вы хотите выполнить обновление Windows Installer Major Upgrade. Добавление таблицы Upgrade позволит найти существующий продукт и установить для свойства PREVIOUSVERSIONINSTALLED код продукта.

Чтобы удалить старый продукт во время установки, вам необходимо добавить действие RemoveExistingProducts к последовательности выполнения. Есть некоторые варианты, которые вы должны сделать о том, где последовательности это в самый основной способ удалить старое приложение в начале последовательности выполнения, добавив:.

<RemoveExistingProducts Before="InstallInitialize" /> 

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

4

В WiX v3.5 есть также новый элемент MajorUpgrade, который упрощает все это авторинга.

1

У меня была аналогичная проблема, и, наконец, я понял, запустив мой установщик с подробным протоколированием.

Существующая установка моего приложения игнорировалась, поскольку он был установлен с InstallScope = «для каждой машины», а по умолчанию - для каждого пользователя.

"FindRelatedProducts: current install is per-user. Related install for product '{GUID}' is per-machine. Skipping..." 

Чтобы решить, я добавил InstallScope в мой пакет элемента:

<Package Id='*' ... InstallScope="perMachine"/> 

Я надеюсь, что это помогает!

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