2016-07-06 2 views
0

Я пытаюсь разрешить обновление моего приложения. Если пользователь устанавливает 1.0.0, то в следующий раз, когда я выпущу версию, я могу дать им 1.1.0, и они могут установить это. Overwriting | removing | replacing the first version Должна быть установлена ​​только версия на панели управления -> удалить или сменить программу.Разрешить обновление приложения

Мои проблемы:

Если я не установлен идентификатор продукта равен * (используйте $ (var.ProductId)»вместо этого) я получаю

Другая версия этого продукта уже установлена. Установка эта версия не может продолжаться ...

Если установить его равным *, то он установит новую версию и я установил две версии.

Я создал простое приложение wix, чтобы проверить это.

<?xml version="1.0" encoding="UTF-8"?> 
<?define ProductVersion="!(bind.FileVersion.MyAssemblyDll)"?> 
<?define UpgradeCode="f4d7f199-28f6-45d5-ad99-7c62938274be"?> 
<?define ProductId="{6408D956-40DA-4AEE-883E-5425F1562004}"?> 
<?define Version="1.2.0"?> 

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="$(var.ProductId)" Name="UpgradeTest" Language="1033" Version="$(var.Version)" Manufacturer="xxx" UpgradeCode="$(var.UpgradeCode)"> 
     <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 

    <!-- prevents down gradeing --> 
    <!-- one upgrade installes new version first then removes the old one. --> 
     <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." Schedule="afterInstallExecute"/> 
     <MediaTemplate EmbedCab="yes"/> 

     <Feature Id="ProductFeature" Title="UpgradeTest" Level="1"> 
      <ComponentGroupRef Id="ProductComponents" /> 
     </Feature> 
    </Product> 

    <Fragment> 
     <Directory Id="TARGETDIR" Name="SourceDir"> 
      <Directory Id="ProgramFilesFolder"> 
       <Directory Id="INSTALLFOLDER" Name="UpgradeTest" /> 
      </Directory> 
     </Directory> 
    </Fragment> 

    <Fragment> 
     <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER"> 
      <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. --> 
      <Component Id="ProductComponent"> 
     <File Id="Product.wxs" Source="Product.wxs" KeyPath="yes" /> 
      </Component> 
     </ComponentGroup> 
    </Fragment> 
</Wix> 

Я пытался получить эту работу в течение нескольких дней, теперь я исчерпал все учебники еще в 2008 Любая помощь будет принята с благодарностью.

Update:

<MajorUpgrade AllowDowngrades="no" DowngradeErrorMessage="A newer version of [ProductName] is already installed." AllowSameVersionUpgrades="no" /> 

Bad: Результаты в двух версиях в панели управления.

Update два:

<Upgrade Id ="$(var.ProductUpgradeCode)"> 
    <UpgradeVersion Minimum="$(var.ProductFullVersion)" OnlyDetect="yes" Property="NEWERVERSIONDETECTED"/> 
    <UpgradeVersion Maximum="$(var.ProductFullVersion)" IncludeMaximum="no" Property="OLDERVERSIONBEINGUPGRADED"/> 
</Upgrade> 


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

<Condition Message="A newer version of [ProductName] is already installed. If you are sure you want to downgrade, remove the existing installation via Programs and Features.">Not NEWERVERSIONDETECTED</Condition> 

Bad: Результаты в двух версиях в панели управления.

ответ

1

То, как я сделал это с помощью GUID для UpgradeCode, но оставляя Id продукта на *. Затем установите свойство переустановки на amus, чтобы переустановить продукт так, как вы хотите.

Это будет своего рода выглядеть следующим образом

<Product Id="*" 
     Name="YourProductName" 
     Language="1033" 
     Version="YourProductVersion" 
     Manufacturer="YourCompany" 
     UpgradeCode="{SOME-GUID}"> 

<SetProperty Id="REINSTALLMODE" Value="amus" After="FindRelatedProducts">Installed AND REMOVE&lt;&gt;"ALL"</SetProperty> 

Для amus вы можете обратиться к документации Microsoft here, но будьте осторожны, хотя. При значении a он переустанавливает ваше приложение, даже если установленный имеет более новую версию. Но вы узнаете, какие символы вам нужны для вашего установщика.

+0

Не работает. Он попросил меня перезагрузить компьютер, чтобы закончить установку, которую я раньше не видел. Но я все же закончил с двумя версиями, установленными на машине, а не только новейшими. – DaImTo

0

Попробуйте изменить <MajorUpgrade> элемент этой

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." AllowSameVersionUpgrades="yes" Schedule="afterInstallExecute"/> 

Из Wix website

Если установлено значение Нет (по умолчанию), установка продукта с той же версии и обновления кода (но другой продукт код) разрешено и обрабатывается MSI как два продукта.Когда установлено значение «да», WiX устанавливает атрибут msidbUpgradeAttributesVersionMaxInclusive, который указывает MSI обрабатывать продукт с той же версией, что и основное обновление.

Таким образом, он обрабатывается так, как если бы ваши две установки не были связаны. Я думаю, что это странное поведение, но обвинять Microsoft в этом.

+0

Подумайте, вы неправильно поняли ту часть, где мне нужна только одна версия моего приложения, установленная самой новой. Это установка двух версий, в которых я установил 1.0.0.0 и 1.2.0.0. Мне нужна только одна версия моего приложения. – DaImTo

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