Windows Installers (.msi dosyaları) neden diğer yükleyicilere göre daha uzun sürüyor?


31

Windows XP günlerinden beri, InstallShield yükleyicileri (yalnızca MSI için önyükleme olan) dahil Windows Yükleyicileri (.msi dosyaları), bir uygulamanın kaldırılması diğer yükleyicilere göre yaklaşık beş kat daha uzun sürdü. Aynı şey genellikle yükleme konusunda da geçerlidir.

Neden hala bu kadar uzun sürüyorlar ve insanlar neden hala MSI'yı yükleme için kullanıyorlar? Örneğin:

VLC'yi kaldırın - yaklaşık 5 saniye sürer.
XYZ'i kaldırın - "Kaldırmaya hazırlanıyor ..." başlatılır ve ardından 15 saniyelik bir gecikme olur.

Tek yaptığı, dosyaları kaldırmak ve kayıt defterini (COM kayıtları da içerebilir) temizlemektir, öyleyse neden bu kadar uzun sürüyor?


Sadece (1) sistem kontrol noktası özelliğini geri devre dışı, eğer nota, bu sadece doğrudur istiyorum ve ben yavaş Inno montajcılar sürü gördüm - Windows Installer özgü değildir dev yükleyici (var (2) çünkü onlar çok büyükler). Windows yükleyicileri yüklemek yaşadım ve saniye (gerçekten) bir avuç kendilerini kaldırın. (Örneğin, Bootvis sistemime 3 saniye içinde yüklenir. Aynı sürede kaldırılır. Ve hayır, sistemim de hızlı bir şekilde yanmıyor.) Aradaki fark, Windows Installer'ın çok daha fazla özelliği, daha büyük programları olması. daha sık kullan.
Mehrdad

@Mehrdad: (1) Sistem Geri Yüklemeyi Etkinleştirdiniz mi?
Chris S,

Gerçekten evet, yazım hatası.
Mehrdad

2
Buraya geldim çünkü MSI kaldırması sonsuza dek sürüyordu ... ve aslında sebep pop-up'ın Do you want to allow the following program from an unknown publisher to make changes to this computer?arka planda saklanmasıydı.
Nicolas Raoul

MSI kurulumlarını hızlandırmak için teknik detaylar için bu cevaba bakınız: superuser.com/a/296534/11906
Stein Åsmul

Yanıtlar:


32

Windows yükleyici önce sistematik olarak oldukça yavaş bir işlem olan bir sistem geri yükleme noktası oluşturur.

Ayrıca, uygun bir şekilde, "Windows Installer berbat" başlıklı makalesinden bir alıntı:

Kurulumun, yazılımınızı yüklemek için birkaç basit adım uygulayan ve ardından geri yükleme işlemini gerçekleştiren bir programdan oluşmasıydı.

Windows Installer bu şekilde çalışmaz. Basitçe kurmak ve bununla bitmesine izin vermek için bir program çalıştırmak yerine, sisteminizin durumunu inceler, ardından programın yükleyicisi olan veritabanının durumunu inceler, sonra ikisini nasıl uzlaştıracağınıza dair bir dizi karmaşık hesaplama yapar.

Öyle görünüyor ki, bir kurulum betiği çalıştırmak yerine, seyahat eden bir satıcı sorununu çözmekle ilgili. Bu yüzden çok yavaş çalışıyor. Ya da en azından benim izlenimim.

Ayrıca, Windows yükleyicisinin tüm bilgileri dünyanın en hızlı veritabanı olmayan kayıt defterinde tuttuğunu da ekliyorum.


3
Muhtemelen dpkgpaket veritabanı için kullandığından daha hızlıdır (şüphesiz ki, dpkg içindeki her şeyi saklamaz ): /var/lib/dpkg/statusbir zamanlar kuruldukları her bir paketi listeleyen ve o zamandan beri temizlenmemiş olan düz bir metin dosyasıdır. temizlenmiş olanları her zaman göz ardı ettiğinden bile emin değilim.
SamB,

3
dpkg"Kalan Süre: 0 saniye" diyen iki dakika boyunca ilerleme çubuklarıyla bana yalan söylemez ...
LawrenceC

20

Windows Installer gerçekten de yavaş olduğu için bir üne sahiptir. Buna katkıda bulunan birkaç şey var ve ben aşağıda bunları ele alacağım. Ancak nihayetinde, bir kişi yazılımın kurulumu ve kaldırılması sırasında bir, iki veya üç dakikalık bir çekişme olup olmadığını sormalıdır. TV kanallarını çevirmekten daha fazla zaman alıyorum :)

Kayıt Defteri
Bu, bir numaralı suçludur. Windows Installer, işlemleri için kayıt defterini yoğun olarak kullanır. Sisteminiz olgunlaştıkça, uygulamaları yükleyip kaldırırken ve kayıt defteri boyutu büyüdükçe veya parçalandıkça, MSI daha yavaş olacaktır. Aynı uygulama, bozulmamış bir Windows yüklemesinde, olgunlaşmış bir sisteme göre çok daha hızlı yükleyip kaldıracak. Buradaki çözüm, kayıt defterini temiz ve birleştirilmeye çalışmaktır.

Kayıt defteri temizliği için, mevcut birçok araçtan birini kullanın. Ancak kayıt defteri birleştirme için iç kovan optimizasyonu ve fiziksel dosya birleştirme için PageDefrag için yeterli NTREGOPT öneremiyorum .

MSI işlemlerinin kayıt defterinde yavaşlama sebebi, MSI'nin bunu nasıl kullandığı ile ilgilidir. Windows Installer, hangi Ürünlerin hangi Bileşenleri ve hangi Konumunun yüklü olduğunu izlemek için kayıt defterini kullanır. Orijinal kurulum GUID'leri sıkıştırılmış biçimde kullanılır. Yüklemeler hakkında makine başına bilgi bulunabilir HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18, oysa kullanıcı başına veri yanında ve altında HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\kullanıcı SID'si olan bir anahtarda bulunur.

Her iki anahtar da oldukça büyük olabilir ve çok sayıda alt anahtar ve değer içerir. Yüklenen her uygulamanın Ürünlerini, Bileşenlerini ve KeyPath'lerini kontrol ederler. Tüm bu bilgiler, doğru bir kaldırma prosedürü için okunmalı ve işlenmelidir. Ancak kayıt defteri formatı, anahtar kelimeleri ikili aramalara izin veren alfabetik sırayla listeler. Ancak değerler değildir. Oluşturuldukları gibi saklanırlar, bu nedenle doğrusal bir arama prosedürü gerçekleştirilmelidir. Bu algoritma performansını yavaşlatır.

Sonuç olarak, MSI, yazılımın yüklenmesi ve kaldırılması için oldukça eksiksiz ve doğru bir yöntemdir. Ancak, kayıt defteri bağımlılığından muzdariptir. Sistem mükemmel. Uzun zaman önce elden geçirmesi gereken Windows kayıt defteri :)

Daha ileri bilgi için:
Her yükleme veya kaldırma işlemi sırasında MSI'nin ne yaptığını derinlemesine incelemek için, MSI Hata Ayıklama'nın nasıl kurulacağını açıklayan bu makaleye bakın . Veya, daha az ancak yine de değerli bilgiler için, bu , günlük kaydını nasıl etkinleştireceğinizi gösterir.


4
Ayrıca, bildiğim kadarıyla, MSI yaptığı her şey için işlemleri kullanır, böylece bir işlem başarısız olduğunda her zaman uygun bir geri alma işlemi yapabilir. Bu muhtemelen hıza katkıda bulunmaz ancak veri bütünlüğü için oldukça önemlidir. (Bir NSIS kurulumcusu başarısız olduktan sonra ne sıklıkta temizlik yapmam gerektiğini saymayı bıraktım -.-)
Joey

Şu anda OpenOffice'i
kuruyorum

Çok bilgilendirici. Birisi için msi günlüklerimde "geri yükleme noktası oluşturulamıyor" hatalarını sık sık (belki geri yükleme noktası teklifine ulaşılmış olabilir?) Alıyor gibi görünüyor, bu nedenle geri yükleme noktalarının oluşturulması yükleme zamanlarımı engelleme şansını yakalamıyor. Ne olursa olsun, yükleme sürelerim hala yavaş ve değer arama sizin belirttiğiniz kadar yavaşsa, Microsoft’un kayıt defterinin ikili özelliklerinde ek yaprak / düğüm bilgileri için ek bir uygulama sağlaması için bir neden olmadığını varsayalım. ek ikili arama.
chaz

> Ancak, yazılım yükleme ve kaldırma işleminde bir, iki veya üç dakika gerçekten bir sorun olup olmadığını sormalıdır. Evet.
Alexei Averchenko

6

Windows yükleyicisinin , bazıları burada tanımladığım kurumsal dağıtım için birçok büyük avantajı var: https://serverfault.com/a/274609/20599

Windows Installer oturumunun yavaşlığının çoğu geri alma yeteneklerinden kaynaklanmaktadır . Öncelikle , yükleme veya kaldırma işleminden önce bir geri yükleme noktası oluşturur (sistem geri yükleme devre dışı bırakılmadığı sürece). Ardından , bir hata meydana geldiğinde sistemin orijinal durumuna geri yüklenebilmesini sağlamak için hem kaldırma hem de yükleme sırasında etkilenen tüm dosyaları yedekler .

Katkıda bulunan bir diğer faktör, MSI'daki tüm bileşenlerin kayıt defterinde kayıtlı olacağıdır . Bu, bazı ek yükü içerir .

Derlenmiş MSI dosyaları için , yükleme dosyalarını çıkarmak için biraz zamana ihtiyaç vardır .

MSI kurulumlarını hızlandırmak için teknik detaylar için bu cevaba bakınız .


3

Windows Installers pek çok nedenden ötürü çok yaygın olarak kullanılıyor: işletim sistemi entegrasyonu, güvenlik politikaları, katılımsız kurulumlar ve daha fazlası.

Düşünebilmemin en yaygın nedeni katılımsız kurulumlar ve ağ dağıtımlarıdır. Büyük şirketler, .MSI dosyasını bir ağ sürücüsünde bulundurarak ve ardından yükleme işlemini otomatikleştirmek için uzaktaki bir makinede bir toplu iş dosyası (veya dağıtım sihirbazı uygulaması) arayarak uygulamaları kolayca dağıtabilir.

.MSI dosyalarının dışında başka seçenekler olsa da , çoğu diğer yükleyicinin sahip olmadığı Windows sürümleriyle bütünleşen bazı benzersiz özellikler vardır .

Ve sadece sen bilirsin - InstallShield her zaman MSI dosyalarında ön uç değildir. Ayrıca kendi tescilli kurulum çözümlerine sahipler.


1
Soru MSI'nin neden saf .exe yükleyicilere kıyasla bir şey yapması çok uzun sürdüğü hakkındaydı.
Grawity

5
Sorusundan ... "ve insanlar neden hala MSI'yı yüklemek için kullanıyorlar?"
Atılım

@grawity: teknik olarak, msi kurulumcuları da exe içinde paketlenebilir, ancak bu muhtemelen saçları bölmektedir.
music2myear
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.