Mengapa Pemasang Windows (file .msi) membutuhkan waktu lebih lama untuk dihapus daripada pemasangan lainnya?

31

Sejak Windows XP, Pemasang Windows (file .msi), termasuk Pemasang InstallShield (yang hanya merupakan bootstrap untuk MSI) telah memakan waktu sekitar lima kali lebih lama untuk menghapus instalasi aplikasi dibandingkan dengan pemasangan lainnya. Hal yang sama juga biasanya berlaku untuk menginstal.

Mengapa mereka masih membutuhkan waktu selama ini, dan mengapa orang masih menggunakan MSI untuk menginstal? Sebagai contoh:

Copot pemasangan VLC - membutuhkan waktu sekitar 5 detik.
Copot pemasangan XYZ - luncurkan "Bersiap untuk menghapus ..." diikuti dengan penundaan 15 detik.

Yang dilakukan adalah menghapus file dan membersihkan registri (yang mungkin termasuk registrasi COM), jadi mengapa perlu waktu lama?

Chris S
sumber
Saya hanya ingin mencatat, ini hanya berlaku jika Anda (1) menonaktifkan fitur sistem restore checkpoint, dan (2) ini adalah installer raksasa (yang tidak unik untuk Windows Installer - saya telah melihat banyak installer Inno yang lambat, hanya karena mereka besar). Saya sudah menginstal installer Windows dan menghapus diri mereka dalam (secara harfiah) beberapa detik. (Sebagai contoh, Bootvis menginstal dalam 3 detik pada sistem saya. Ini mencopot pemasangan dalam jumlah waktu yang sama. Dan tidak, sistem saya juga tidak cepat menyala.) Perbedaannya adalah bahwa Penginstal Windows memiliki lebih banyak fitur, sehingga program yang lebih besar gunakan lebih sering.
Mehrdad
@Mehrdad maksud Anda (1) aktifkan pengembalian sistem?
Chris S
Memang benar, salah ketik.
Mehrdad
2
Saya datang ke sini karena uninstall MSI memakan waktu lama ... dan sebenarnya alasannya adalah pop-up Do you want to allow the following program from an unknown publisher to make changes to this computer?bersembunyi di latar belakang.
Nicolas Raoul
Lihat jawaban ini untuk detail teknis untuk mempercepat pemasangan MSI: superuser.com/a/296534/11906
Stein Åsmul

Jawaban:

32

Pemasang Windows pertama secara sistematis membuat titik pemulihan sistem, yang merupakan operasi yang cukup lambat.

Juga dari artikel yang berjudul, dengan tepat, "Pemasang Windows menyebalkan" , kutipan:

Dulu instalasi itu akan terdiri dari program yang menjalankan dan mengambil beberapa langkah sederhana untuk menginstal perangkat lunak Anda, kemudian lakukan sebaliknya pada penghapusan instalasi.

Itu bukan cara Penginstal Windows bekerja. Alih-alih menjalankan program untuk menginstal dan membiarkannya dilakukan, itu memeriksa keadaan sistem Anda, kemudian memeriksa keadaan database yang merupakan pemasang program, kemudian melakukan serangkaian perhitungan yang terlalu rumit tentang cara merekonsiliasi keduanya.

Tampaknya, alih-alih menjalankan skrip instalasi, ini akan menyelesaikan masalah salesman keliling. Karena itulah ia bekerja sangat lambat. Atau setidaknya, itulah kesan saya.

Saya juga menambahkan bahwa penginstal Windows menyimpan semua informasi dalam registri, yang bukan database tercepat di dunia.

harrymc
sumber
3
Ini mungkin lebih cepat daripada apa yang dpkgdigunakan untuk database paketnya (walaupun, diakui, dpkg tidak menyimpan semuanya di dalamnya): /var/lib/dpkg/statusadalah file teks datar yang mencantumkan setiap paket tunggal yang pernah diinstal, dan sejak itu belum dibersihkan - dan saya Aku bahkan tidak yakin itu selalu menghilangkan yang dibersihkan.
SamB
3
dpkgtidak berbohong kepada saya dengan progress bar yang mengatakan "Sisa Waktu: 0 detik" selama dua menit, meskipun ...
LawrenceC
20

Pemasang Windows memang memiliki reputasi lambat. Ada beberapa hal yang berkontribusi terhadap hal ini dan saya akan mengatasinya di bawah ini. Tetapi pada akhirnya, orang harus bertanya pada diri sendiri apakah satu, dua, atau tiga menit benar-benar masalah pertikaian ketika menginstal dan menghapus instalasi perangkat lunak. Saya mengambil lebih banyak waktu daripada membalik-balik saluran TV :)

Registry
Ini adalah pelakunya nomor satu. Pemasang Windows banyak menggunakan registri untuk operasinya. Ketika sistem Anda menjadi matang, saat Anda menginstal dan menghapus aplikasi dan seiring bertambahnya ukuran registri atau menjadi terfragmentasi, MSI akan menjadi lebih lambat. Aplikasi yang sama akan menginstal dan menghapus instalan lebih cepat pada instalasi Windows yang asli, daripada pada sistem yang matang. Solusinya di sini adalah mencoba dan menjaga registri tetap bersih dan didefragmentasi.

Untuk pembersihan registri, gunakan salah satu dari banyak alat yang tersedia di luar sana. Tetapi untuk defrag registri saya tidak dapat merekomendasikan NTREGOPT yang cukup untuk optimasi sarang internal dan PageDefrag untuk defragmentasi file fisik.

Alasan mengapa operasi MSI menjadi lambat pada registri ada hubungannya dengan bagaimana MSI menggunakannya. Pemasang Windows menggunakan registri untuk melacak Produk mana yang telah diinstal Komponen mana dan ke Lokasi mana itu diinstal. GUIDs instalasi asli digunakan dalam format terkompresi. Informasi per mesin tentang penginstalan dapat ditemukan di HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18, sedangkan data per pengguna ditemukan di sebelahnya di bawah HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\dan pada kunci dengan SID pengguna.

Kedua kunci ini bisa sangat besar dan berisi banyak subkunci dan nilai. Mereka mengontrol Produk, Komponen dan KeyPath dari setiap aplikasi yang diinstal. Semua informasi ini harus dibaca dan diproses untuk prosedur penghapusan instalasi yang benar. Namun format registri mencantumkan kunci dalam urutan abjad yang memungkinkan untuk pencarian biner. Tapi nilainya tidak. Mereka disimpan begitu dibuat, jadi prosedur pencarian linear harus dilakukan. Yang memperlambat kinerja algoritma.

Secara keseluruhan, MSI adalah metode yang agak lengkap dan akurat untuk instalasi dan penghapusan instalasi perangkat lunak. Tetapi menderita ketergantungan registri. Sistemnya sangat baik. Ini adalah registri Windows yang seharusnya diperbaiki sejak lama :)

Untuk informasi lebih lanjut:
Untuk analisis mendalam tentang apa yang dilakukan MSI selama setiap prosedur pemasangan atau penghapusan, lihat artikel ini yang menjelaskan cara mengatur MSI Debug. Atau, untuk informasi yang kurang namun masih bernilai, yang satu ini cara mengaktifkan logging.

A Dwarf
sumber
4
Juga, sejauh yang saya tahu, MSI menggunakan transaksi untuk semua yang dilakukannya sehingga selalu dapat melakukan rollback yang tepat setiap kali operasi gagal. Ini mungkin juga tidak berkontribusi terhadap kecepatan tetapi sangat penting untuk integritas data. (Saya berhenti menghitung seberapa sering saya perlu membersihkan setelah installer NSIS gagal -.-)
Joey
Saat ini, saya sedang menginstal OpenOffice dan sudah hampir satu jam;)
Quiark
Sangat informatif. I untuk satu tampaknya sering mendapatkan kesalahan "Tidak dapat membuat titik pemulihan" (mungkin kutipan titik pemulihan tercapai?) Di log msi saya, sehingga pembuatan titik pemulihan tidak mendapatkan kesempatan untuk menghambat waktu pemasangan saya. Apapun, waktu instal saya masih lambat, dan jika nilai pencarian lambat seperti yang Anda katakan, saya kira tidak ada alasan di pihak Microsoft untuk memberikan implementasi tambahan untuk informasi tambahan daun / simpul dalam spesifikasi biner registri untuk melengkapi pencarian biner.
chaz
> Tetapi pada akhirnya, seseorang harus bertanya pada diri sendiri apakah satu, dua, atau tiga menit benar-benar masalah pertikaian ketika menginstal dan menghapus instalan perangkat lunak. Iya nih.
Alexei Averchenko
6

Pemasang Windows memiliki banyak keuntungan besar untuk penyebaran perusahaan , beberapa di antaranya telah saya jelaskan di sini: https://serverfault.com/a/274609/20599

Sebagian besar kelambatan sesi Pemasang Windows adalah karena kemampuan rollback-nya . Pertama itu menciptakan titik pemulihan sebelum menginstal atau menghapus instalasi (asalkan pemulihan sistem belum dinonaktifkan). Kemudian itu akan mencadangkan semua file yang terkena dampak selama uninstall dan menginstal untuk memastikan bahwa sistem dapat dikembalikan ke keadaan semula jika terjadi kesalahan.

Faktor lain yang berkontribusi adalah bahwa semua komponen dalam MSI akan terdaftar dalam registri . Ini melibatkan beberapa overhead .

Untuk mengkompilasi file MSI beberapa waktu juga diperlukan untuk mengekstrak file instal .

Lihat jawaban ini untuk detail teknis untuk mempercepat instalasi MSI .

Stein Åsmul
sumber
3

Pemasang Windows sangat umum digunakan karena berbagai alasan - integrasi sistem operasi, kebijakan keamanan, instalasi tanpa pengawasan, dan banyak lagi.

Alasan paling umum yang dapat saya pikirkan adalah instalasi tanpa pengawasan, dan distribusi jaringan. Perusahaan besar dapat dengan mudah mendistribusikan aplikasi, dengan memiliki file .MSI pada drive jaringan, dan kemudian hanya memanggil batchfile (atau aplikasi wizard distribusi) pada mesin jarak jauh untuk mengotomatiskan proses instalasi.

Sementara opsi lain ada di luar file .MSI, ada beberapa fitur unik yang terintegrasi dengan sebagian besar versi Windows yang tidak dimiliki banyak penginstal lain.

Dan agar Anda tahu - InstallShield tidak selalu merupakan front-end untuk file MSI. Mereka juga memiliki solusi instalasi milik mereka sendiri.

Penerobosan
sumber
1
Pertanyaannya adalah tentang mengapa MSI membutuhkan waktu lama untuk melakukan sesuatu, dibandingkan dengan installer .exe murni.
grawity
5
Dari pertanyaan ... "dan mengapa orang masih menggunakan MSI untuk menginstal?"
Terobosan
@grawity: secara teknis, installer msi dapat dikemas dalam exe juga, tapi itu mungkin rambut yang membelah.
music2myear