Tại sao Trình cài đặt Windows (tệp .msi) mất nhiều thời gian để gỡ cài đặt hơn các trình cài đặt khác?


31

Kể từ thời Windows XP, Trình cài đặt Windows (tệp .msi), bao gồm trình cài đặt InstallShield (chỉ là phần khởi động cho MSI) đã mất khoảng năm lần để gỡ cài đặt ứng dụng so với các trình cài đặt khác. Điều tương tự cũng thường đúng về cài đặt.

Tại sao họ vẫn mất nhiều thời gian như vậy và tại sao mọi người vẫn sử dụng MSI để cài đặt? Ví dụ:

Gỡ cài đặt VLC - mất khoảng 5 giây.
Gỡ cài đặt XYZ - khởi chạy "Chuẩn bị xóa ..." sau đó là độ trễ 15 giây.

Tất cả những gì nó làm là xóa các tệp và làm sạch sổ đăng ký (có thể bao gồm đăng ký COM), vậy tại sao nó lại mất nhiều thời gian như vậy?


Tôi chỉ muốn lưu ý, điều này chỉ đúng nếu bạn (1) vô hiệu hóa tính năng điểm kiểm tra khôi phục hệ thống (2) đó là trình cài đặt khổng lồ (không phải là duy nhất cho Windows Installer - Tôi đã thấy rất nhiều trình cài đặt Inno chậm, đơn giản vì chúng rất lớn). Tôi đã có các trình cài đặt Windows cài đặt tự gỡ bỏ trong một vài giây. (Ví dụ: Bootvis cài đặt trong 3 giây trên hệ thống của tôi. Nó sẽ gỡ cài đặt trong cùng một khoảng thời gian. Và không, hệ thống của tôi cũng không nhanh như vậy.) Sự khác biệt là Windows Installer có nhiều tính năng hơn, vì vậy các chương trình lớn hơn sử dụng nó thường xuyên hơn
Mehrdad

@Mehrdad có nghĩa là (1) cho phép khôi phục hệ thống?
Chris S

Quả thực là có, lỗi đánh máy.
Mehrdad

2
Tôi đến đây vì gỡ cài đặt MSI đã mất mãi mãi ... và thực sự lý do là cửa sổ bật lên Do you want to allow the following program from an unknown publisher to make changes to this computer?đang ẩn trong nền.
Nicolas Raoul

Xem câu trả lời này để biết chi tiết kỹ thuật để tăng tốc cài đặt MSI: superuser.com/a/296534/11906
Stein smul

Câu trả lời:


32

Trình cài đặt Windows trước tiên tạo ra một điểm khôi phục hệ thống, đây là một hoạt động khá chậm.

Cũng từ bài viết có tiêu đề, "Windows Installer hút" , một đoạn trích:

Trước đây, quá trình cài đặt sẽ bao gồm thực thi chương trình và thực hiện một vài bước đơn giản để cài đặt phần mềm của bạn, sau đó thực hiện ngược lại khi gỡ cài đặt.

Đó không phải là cách Windows Installer hoạt động. Thay vì chạy một chương trình chỉ đơn giản là cài đặt và thực hiện, nó sẽ kiểm tra trạng thái hệ thống của bạn, sau đó kiểm tra trạng thái của cơ sở dữ liệu là trình cài đặt của chương trình, sau đó thực hiện một loạt các tính toán quá phức tạp về cách dung hòa hai.

Có vẻ như, thay vì chạy một kịch bản cài đặt, nó sẽ giải quyết vấn đề nhân viên bán hàng du lịch. Đó là lý do tại sao nó chạy rất chậm. Hoặc ít nhất, đó là ấn tượng của tôi.

Tôi cũng thêm rằng trình cài đặt Windows lưu giữ tất cả thông tin trong sổ đăng ký, đây không phải là cơ sở dữ liệu nhanh nhất thế giới.


3
Nó có thể nhanh hơn những gì dpkgsử dụng cho cơ sở dữ liệu gói của nó (mặc dù, phải thừa nhận, dpkg không lưu trữ mọi thứ trong đó): /var/lib/dpkg/statuslà một tệp văn bản phẳng liệt kê mọi gói đã được cài đặt và chưa bị xóa - và tôi Tôi thậm chí không chắc chắn rằng nó luôn bỏ qua những người bị thanh trừng.
SamB

3
dpkgkhông nói dối tôi với các thanh tiến trình có nội dung "Thời gian còn lại: 0 giây" trong hai phút, mặc dù ...
LawrenceC

20

Windows Installer thực sự có tiếng là chậm. Có một vài điều đóng góp cho điều này và tôi sẽ giải quyết chúng dưới đây. Nhưng cuối cùng, người ta nên tự hỏi nếu một, hai hoặc ba phút thực sự là một vấn đề gây tranh cãi khi cài đặt và gỡ cài đặt phần mềm. Tôi mất nhiều thời gian hơn việc lướt qua các kênh truyền hình :)

Sổ đăng ký
Đây là thủ phạm số một. Windows Installer sử dụng rất nhiều registry cho các hoạt động của nó. Khi hệ thống của bạn đáo hạn, khi bạn cài đặt và gỡ cài đặt các ứng dụng và khi sổ đăng ký tăng kích thước hoặc bị phân mảnh, MSI sẽ trở nên chậm hơn. Ứng dụng tương tự sẽ cài đặt và gỡ cài đặt nhanh hơn nhiều trên bản cài đặt Windows nguyên sơ, so với trên hệ thống trưởng thành. Giải pháp ở đây là thử và giữ cho registry sạch sẽ và chống phân mảnh.

Để làm sạch registry, sử dụng một trong nhiều công cụ có sẵn trên mạng. Nhưng đối với phân mảnh đăng ký, tôi không thể đề xuất đủ NTREGOPT để tối ưu hóa tổ ong nội bộ và PageDefrag cho phân mảnh tệp vật lý.

Lý do hoạt động của MSI có thể trở nên chậm trên sổ đăng ký phải liên quan đến cách MSI sử dụng nó. Windows Installer sử dụng sổ đăng ký để theo dõi Sản phẩm nào đã cài đặt Thành phần nào và Vị trí được cài đặt. GUID cài đặt ban đầu được sử dụng ở định dạng nén. Thông tin trên mỗi máy về cài đặt có thể được tìm thấy tại HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18, trong khi dữ liệu của mỗi người dùng được tìm thấy bên cạnh nó ở bên dưới HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\và trên khóa có SID người dùng.

Cả hai khóa này có thể khá lớn và chứa nhiều khóa con và giá trị. Họ kiểm soát Sản phẩm, Thành phần và KeyPath của từng ứng dụng được cài đặt. Tất cả thông tin này phải được đọc và xử lý cho một quy trình gỡ cài đặt chính xác. Tuy nhiên, định dạng đăng ký liệt kê các khóa theo thứ tự chữ cái cho phép tìm kiếm nhị phân. Nhưng các giá trị thì không. Chúng được lưu trữ khi chúng được tạo, do đó, một quy trình tìm kiếm tuyến tính phải được thực hiện. Mà làm chậm hiệu suất thuật toán.

Nói chung, MSI là một phương pháp khá đầy đủ và chính xác để cài đặt và gỡ cài đặt phần mềm. Nhưng nó bị phụ thuộc đăng ký của nó. Hệ thống này là tuyệt vời. Đó là Windows registry nên đã được đại tu từ lâu :)

Để biết thêm thông tin nâng cao:
Để phân tích sâu về những gì MSI đang làm trong mỗi quy trình cài đặt hoặc gỡ cài đặt, hãy tham khảo bài viết này giải thích cách thiết lập MSI Debug. Hoặc, với thông tin ít hơn nhưng vẫn có giá trị, đây là cách để kích hoạt đăng nhập.


4
Ngoài ra, theo như tôi biết, MSI sử dụng các giao dịch cho tất cả mọi thứ nó làm để nó luôn có thể thực hiện quay vòng thích hợp mỗi khi thao tác thất bại. Điều này có lẽ cũng không đóng góp cho tốc độ nhưng khá cần thiết cho tính toàn vẹn dữ liệu. (Tôi đã ngừng đếm tần suất tôi cần dọn dẹp sau khi trình cài đặt NSIS không thành công -.-)
Joey

Ngay bây giờ, tôi đang cài đặt OpenOffice và đã gần một giờ rồi;)
Quiark

Rất nhiều thông tin. Tôi dường như thường gặp lỗi "Không thể tạo điểm khôi phục" (có thể đạt được trích dẫn điểm khôi phục?) Trong nhật ký msi của tôi, vì vậy việc tạo điểm khôi phục không có cơ hội cản trở thời gian cài đặt của tôi. Bất kể, thời gian cài đặt của tôi vẫn chậm và nếu tra cứu giá trị chậm như bạn nói, tôi cho rằng không có lý do nào về phần của Microsoft để cung cấp một triển khai bổ sung cho thông tin lá / nút bổ sung trong thông số nhị phân của sổ đăng ký bổ sung tìm kiếm nhị phân.
chaz

> Nhưng cuối cùng, người ta nên tự hỏi mình nếu một, hai hoặc ba phút thực sự là vấn đề tranh chấp khi cài đặt và gỡ cài đặt phần mềm. Vâng.
Alexei Averchenko

6

Trình cài đặt Windows có nhiều lợi thế lớn để triển khai công ty , một số trong đó tôi đã mô tả ở đây: https://serverfault.com/a/274609/20599

Phần lớn sự chậm chạp của phiên Windows Installer là do khả năng khôi phục của nó . Đầu tiên, nó tạo một điểm khôi phục trước khi cài đặt hoặc gỡ cài đặt (với điều kiện khôi phục hệ thống chưa bị vô hiệu hóa). Sau đó, nó sẽ sao lưu tất cả các tệp bị ảnh hưởng trong cả quá trình gỡ cài đặt và cài đặt để đảm bảo rằng hệ thống có thể được khôi phục về trạng thái ban đầu nếu xảy ra lỗi.

Một yếu tố đóng góp khác là tất cả các thành phần trong MSI sẽ được đăng ký trong sổ đăng ký . Điều này liên quan đến một số chi phí .

Đối với các tệp MSI đã biên dịch, cần có thời gian để trích xuất các tệp cài đặt .

Xem câu trả lời này để biết chi tiết kỹ thuật để tăng tốc cài đặt MSI .


3

Trình cài đặt Windows thường được sử dụng vì nhiều lý do - tích hợp hệ điều hành, chính sách bảo mật, cài đặt không giám sát và nhiều hơn nữa.

Lý do phổ biến nhất tôi có thể nghĩ đến là các cài đặt không giám sát và phân phối mạng. Các tập đoàn lớn có thể dễ dàng phân phối ứng dụng, bằng cách có tệp .MSI trên ổ đĩa mạng, sau đó chỉ cần gọi một tệp batchfile (hoặc ứng dụng trình hướng dẫn phân phối) trên một máy từ xa để tự động hóa quá trình cài đặt.

Mặc dù các tùy chọn khác tồn tại bên ngoài các tệp .MSI, có một số tính năng độc đáo tích hợp với hầu hết các phiên bản Windows mà rất nhiều trình cài đặt khác không có.

Và chỉ để bạn biết - InstallShield không phải lúc nào cũng là mặt trước của các tệp MSI. Họ cũng có giải pháp cài đặt độc quyền của riêng họ.


1
Câu hỏi là tại sao MSI mất quá nhiều thời gian để làm một cái gì đó, so với các trình cài đặt .exe thuần túy.
grawity

5
Từ câu hỏi ... "và tại sao mọi người vẫn sử dụng MSI để cài đặt?"
Đột phá

@grawity: về mặt kỹ thuật, trình cài đặt msi cũng có thể được đóng gói trong exe, nhưng đó có thể là chia tóc.
nhạc2myear
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.