WiX

2010-12-21 18 views
5

yılında sonra = "InstallValidate" ile RemoveExistingProducts önce Özel eylem yürütmek için nasıl böyle bir şey var . satırlarında şey: Özel Eylemi InstallInitialize önce olamaz çünkü tabiiWiX

<CustomAction Id="FixStuff" .. /> 

<InstallExecuteSequence> 
    <Custom Action="FixStuff" Before="RemoveExistingProducts" /> 
    <RemoveExistingProducts After="InstallValidate"/> 
</InstallExecuteSequence> 

Bu işe yaramaz. InstallValidate ve InstallInitialize arasındaki mevcut ürünleri gerçekten kaldırmak isterdim, ancak mevcut ürünleri kaldırmadan önce FixStuff'ı çalıştırmak isterim.

Bunu yapmak bile mümkün mü?

cevap

6

Maalesef, mevcut yapılandırmanızla birlikte RemoveExistingProducts ürününden önce yükseltilmiş özel bir eylemi çalıştıramazsınız.

bazı olası yaklaşımlar olacaktır:

  1. Taşı RemoveExistingProducts sağ InstallFinalize önce. Bu, özel eylem sorununu çözer, ancak bu yaklaşım birçok kısıtlamaya sahip olduğundan (bileşenlerin adlarını ve GUID'leri sürümleri arasında tutması gerekir, özel eylemleriniz yükseltme işleminin yükleme sonunda gerçekleştirildiğini bilmelidir) başka sorunlara neden olabilir.

  2. Yeni MSI'yi başlatmadan önce eski yükleyiciyi düzelten bir EXE önyükleyici oluşturun.

http://msdn.microsoft.com/en-us/library/bb756929.aspx

    Bu yöntemi kullanarak
  1. Tamir kırık MSI:

    • sorunu çözmek Bu bootrapper bir bildirim yoluyla Yönetici ayrıcalıkları gerektirebilir Eski MSI
    • , bu komutla yeniden başlatan bir BAT veya EXE önyükleyici oluşturun:

    msiexec/fv <path_to_msi>

    • yeni paket önce bir güncelleştirme olarak bu MSI dağıtmak

yeni paket RemoveExistingProducts çalıştırır, eski önbelleğe alınmış MSI sabit olmalıdır ve doğru şekilde kaldırılmalıdır.