Windows Installer neden aynı anda yalnızca tek bir program yükleyebilir?


10

Windows Installer'ın neden bir kerede yalnızca bir program yüklemenize izin verdiğini her zaman merak ediyorum. Özellikle yeni bir Windows kurulumu kurarken birden fazla kurulum başlatamamak çok sinir bozucudur. Bunun nedeni nedir?

Yanıtlar:


6

Eşzamanlı kurulumlar gerçekleştiğinde, bazı dosyaları paylaştıklarını varsayarak, doğruluğu garanti etmek çok karmaşık olacaktır. Bunun için bazı işlemlerin yapılması gerekir.

  • Dosyaları kilitlemeniz gerekiyor
  • Kurulum başarısız olursa ara değişiklikleri geri almak mümkün olmalıdır (şimdi mümkün mü, emin değil misiniz?)

Bu kavramlar işlemsel veritabanlarından bilinir - ancak konu önemsiz değildir ve genellikle dosya sistemlerinde tam bir işlem altyapısı bulamazsınız (günlük dosya sistemleri bunun bir parçası olsa da). Bir sorun, birden fazla kilidin bir kilitlenmeye yol açabileceğidir - o zaman kilitlenme algılamasına (veya her iki yükleyicinin sonsuza kadar asılı kalacağına) ve bunu tedavi etmenin bir yoluna ihtiyacınız vardır. Kilitlenmelerden kaçınılabilir (örneğin, dosyaları her zaman aynı sırada kilitleyerek), ancak başka sorunlar da vardır:

Gerekli tüm dosyaları önde kilitlerseniz, sahip olduklarınızı etkili bir şekilde elde edersiniz: Bir yükleyici diğeri bitene kadar beklemelidir. Gerekli tüm dosyaları önde kilitlemezseniz ve devam ederseniz, "işlemin" başarısız olma riskiyle karşı karşıya kalırsınız. Bu, montajcılardan birinin yeniden başlatılması gerektiği anlamına gelir.

Daha sonra, işlem yalıtım düzeylerini düşünmek zorunda kalabilirsiniz - tam olarak doğru olmak için, işlemlerinizin "serileştirilebilir" olması gerekir - ancak bu birçok veritabanında bile kolay değildir.

Tam izolasyondan kaçınan problemlerle başa çıkmak için alternatif stratejiler bile olabilir, ancak doğruluklarını kanıtlamak genellikle daha zor olurdu.

Eşzamanlı kurulumda çok daha zorlayıcı kurulum sonrası problemlerimiz olacağına inanıyorum - özellikle de bir işletim sistemi satıcısının (veya dağıtımının)% 100 temiz olmasını sağlamak için tüm sorunlardan geçeceğini düşünüyorum. Bu yüzden işletim sistemi tarafından teklif edilmiş olsa bile kullanmamayı tercih ederim.

Not

Ama belki de gerçekten istediğiniz şey "aynı anda" kurulumunu yapmak değildir. Belki de birbiri ardına yürütülen kurulumları sıralayabilirseniz (ideal olarak aralarında herhangi bir soru sormadan) yeterli olacaktır. Ve bu gerçekten bir şey, diğer bazı işletim sistemleri (dağıtımlar) çok daha iyi idare ediyor.


1
Doğru olsa da, bu cevap bana çok ayrıntılı geliyor. Yükleyici hizmetinin neden olduğu gibi çalıştığını soran birisinin bu cevabı anlaması olası değildir.
gWaldo

2
@gWaldo: Tamam, belki haklısın ... Sonra tekrar, "Bu karmaşık, inan bana (dönem). Yine de anlamazsın" demek istemiyorum. Belki OP (ya da bu soruda tökezleyen başka biri) gerçekten ilgilenir ve sorunun alt kısmına ulaşan bir cevap , onun üzerinde çok kolay görünen bir şeyi çözmek için gerçekten çok karmaşıklık varsa, tahmin etmesine yardımcı olacaktır . yüzey. Kim bilir?
Chris Lercher

Çok doğru. İyi bir noktaya değindin.
gWaldo

Yalıtımla ilgili tüm konuşmalar makul görünse de, Windows Installer çerçevesini kullanmıyorlarsa birden çok yükleyici çalıştırabilirsiniz. Yan yana çalışırken hiçbirini kırmadım ... Belki de sadece şanslıyım :) Kuyruk kurulumlarına gelince, bunun için araçlar var, ancak çok çekirdekli CPU'lar (heck, masaüstü CPU'ları şimdi 8 iş parçacığı çalıştırabilir) ...), yan yana çalıştırmak cevap gibi görünüyor (yine de G / Ç için savaşabilseler de).
Rytis

2
@Rytis: Keşke aynı şansa sahip olsaydım :-) - Yükleyicileri aynı anda çalıştırmadan bile rastgele kırdım. Çoklu çekirdekler hakkında: Bunları kullanmanın başka bir yolu olurdu: Bir kurulum sürecinde birden çok çekirdek kullanarak. Bu hala her zaman mümkün veya kolay değildir, ancak çok daha iyi koordine edilebilir. Genel olarak, tüm kurulum süreci (kuyruk) sadece başlangıçta ve sonunda soru soruyorsa, en büyük zaman tasarrufu hala devam ediyor. Ardından kurulum sırasında bir kahve alabilir veya başka bir şey yapabilirsiniz (ve yapmak istediğiniz şey için kalan çekirdekleri kullanabilirsiniz.).
Chris Lercher

6

Bu, aynı dosyaları / klasörleri / kayıt defteri anahtarlarını / vb. Manipüle eden iki yüklemeye sahip olmaktan kaçınmak için tasarım gereğidir; muhtemelen farklı şekillerde yapılabilirdi, ancak Microsoft bu seçimi yaptı.


Talebinizi desteklemek için herhangi bir referans var mı?
Aaron Digulla

1

Bir toplu iş dosyası kullanarak birbiri ardına hızlı sırayla yüklemek için birkaç MSI dosyasını tekmeleyebilirsiniz. İkisi aynı anda diske yazdıkları için iki MSI dosyasını aynı anda çalıştıramazsınız.

Bunun nedeni, MSI kurulumunun bir kısmının "işlem" olarak çalıştırılmasıdır - işlem listesindeki eylemlerin hatasız tamamlanıp tamamlanmadığına bağlı olarak işlenen veya geri alınan bir değişiklik dizisi. Tümünün hatasız tamamlanması gerekir ve ardından işlem yapılır, aksi takdirde tüm değişikliklerin tamamen geri alınması gerçekleşir. Buna göre, herhangi bir zamanda sadece bu tür bir işlem aktif olabilir.

Teknik MSI düzeyinde, yalnızca InstallExecuteSequence içindeki InstallInitialize ve InstallFinalize standart eylemleri arasındaki eylemler bir işlem olarak çalıştırılır. Bu eylemlerin dışında hiçbir sistem değişikliğinin gerçekleşmesi beklenmez, ancak bazen MSI dosyaları hatalı olarak diğer dizilerde değişiklik yapacak şekilde tasarlanmıştır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.