Tamam, Tamam, bu yüzden en iyisi çözümümümü gönderirim.
Sonuçta bu
a) yüklemesinde ayarlanan Ürün MSI en her birinde bir kayıt anahtarı belirleyerek ... iki kısımdan aşağı kaynar. Açıkçası, MSI özgün olarak yüklenmemişse, kayıt defteri girdisi mevcut olmayacaktır. UI kullanıldığında yükseltme yaparken yanma o defteri anahtarının varlığını kontrol etme yani
<!-- registry entry to state that the item has been installed-->
<Component Id="cmp_WriteToRegistry" Guid="[yourguid]">
<RegistryKey Root="HKLM"
Key="Software\MyCompany]"
Action="createAndRemoveOnUninstall">
<RegistryValue Type="integer" Name="ProductA" Value="1" KeyPath="yes"/>
</RegistryKey>
</Component>
b) ... Yani InstallCondition içinde
<!-- Determine what items are to be installed in the event of an install using the BA-->
<WixVariable Id="chkProductA" Value="![CDATA[chkProductA]]" />
<WixVariable Id="chkProductB" Value="![CDATA[chkProductB]]" />
<WixVariable Id="chkProductC" Value="![CDATA[chkProductC]]" />
<!-- Determine what items are installed in the event of an upgrade-->
<util:RegistrySearch Root="HKLM" Key="SOFTWARE\MyCompany" Value="ProductAInstalled" Variable="ProductAInstalled" Result="exists" />
<util:RegistrySearch Root="HKLM" Key="SOFTWARE\MyCompany" Value="ProductBInstalled" Variable="ProductBInstalled" Result="exists" />
<util:RegistrySearch Root="HKLM" Key="SOFTWARE\MyCompany" Value="ProductCInstalled" Variable="ProductCInstalled" Result="exists" />
<Chain>
<MsiPackage SourceFile="..\SetupProductA\bin\Release\SetupProductA.msi"
InstallCondition="chkProductA OR ProductAInstalled" />
<MsiPackage SourceFile="..\SetupProductB\bin\Release\SetupProductB.msi"
InstallCondition="(chkProductB) OR (ProductBInstalled)" />
<MsiPackage SourceFile="..\SetupProductC\bin\Release\SetupProductC.msi"
InstallCondition="(chkProductC) OR (ProductCInstalled)" />
</Chain>
</Bundle>
, chkProductA doğru olarak değerlendirilir ve İlgili onay kutusu işaretlidir ve ilgili ürün yüklendiğinde ProductAInstalled değeri doğrudur - benim durumumda olan ve kullanıcı etkileşimi olmadan yapılan güncellemeyle ilgilenir.
Nasıl olduğunu bildiğiniz zaman kolay. Benzer bir şey algılamak için yapılabilir
CustomBA_DetectPackageComplete(object sender, DetectPackageCompleteEventArgs e)
{
if (e.PackageId == "SetupProductA" && e.State == PackageState.Present)
{
CustomBA.Engine.NumericVariables["chkProductA"] = 1;
}
etc...
}
: Kesinlikle kendi yönetilen bootstrapper uygulaması yapıyorsanız
Kendi soru sorunuzu tekrar cevaplamanın eski görgü kuralları ... Eğer daha iyi bir cevaba sahip olursa, yukarıdaki cevabı olduğu gibi, bunu duymaktan gerçekten memnun olurum, EN İYİ olmayabilir. Bir haftada daha iyi cevaplar yoksa veya bunu cevap olarak ayarlayacağım. Puanlar için balık tutmuyorum, bu yüzden doğru olanı yapmanın doğru bir şey olduğunu ... –
Sizin çözümün nasıl yapacağımı. "Mülkiyet Desenini Hatırla" a benzer: http://robmensching.com/blog/posts/2010/5/2/The-WiX-toolsets-Remember-Property-pattern – BryanJ
Teşekkürler Bryan. Ben hala tekerlek sahnesini yeniden başlatıyorum/yeniden icat ediyorum, bu yüzden bilmek güzel. –