Tại sao Windows Installer chỉ có thể cài đặt một chương trình duy nhất tại một thời điểm?


10

Tôi đã luôn tự hỏi tại sao Windows Installer chỉ cho phép bạn cài đặt một chương trình tại một thời điểm. Thật là bực bội khi không thể khởi chạy nhiều cài đặt, đặc biệt là khi thiết lập cài đặt Windows mới. lý do cho điều đó là gì?

Câu trả lời:


6

Sẽ rất phức tạp để đảm bảo tính chính xác, khi cài đặt đồng thời diễn ra - giả sử rằng chúng chia sẻ một số tệp. Điều này sẽ cần một số hình thức giao dịch.

  • Bạn cần khóa tập tin
  • Có thể hoàn tác các thay đổi trung gian, nếu cài đặt không thành công (không chắc chắn, nếu bây giờ có thể?)

Các khái niệm này được biết đến từ cơ sở dữ liệu giao dịch - nhưng chủ đề không tầm thường và bạn thường không tìm thấy cơ sở hạ tầng giao dịch đầy đủ trong các hệ thống tệp (mặc dù hệ thống tệp nhật ký cung cấp một phần trong đó). Một vấn đề là, nhiều khóa có thể dẫn đến bế tắc - sau đó bạn cần phát hiện khóa chết (hoặc cả hai trình cài đặt sẽ bị treo vĩnh viễn) và một cách để xử lý điều đó. Bế tắc có thể tránh được (ví dụ bằng cách luôn khóa các tệp theo cùng một thứ tự), nhưng có một số vấn đề khác:

Nếu bạn khóa tất cả các tệp cần thiết lên phía trước, bạn sẽ có được hiệu quả những gì bạn có: Một trình cài đặt phải đợi cho đến khi tệp kia kết thúc. Nếu bạn không khóa tất cả các tệp yêu cầu lên phía trước và tiếp tục, bạn có nguy cơ "giao dịch" sẽ thất bại. Điều đó có nghĩa là, một trong những trình cài đặt sẽ phải được khởi động lại.

Sau đó, bạn có thể phải suy nghĩ về các mức cô lập giao dịch - để hoàn toàn chính xác, các giao dịch của bạn sẽ phải "tuần tự hóa" - nhưng điều đó không dễ dàng, ngay cả đối với nhiều cơ sở dữ liệu.

Thậm chí có thể có các chiến lược thay thế để giải quyết các vấn đề, giúp tránh sự cô lập hoàn toàn, nhưng thường sẽ khó khăn hơn để chứng minh tính đúng đắn của chúng.

Tôi tin rằng, với việc cài đặt đồng thời, chúng tôi sẽ gặp nhiều vấn đề sau khi cài đặt khó hiểu hơn - đặc biệt là vì tôi không nghĩ, một nhà cung cấp hệ điều hành (hoặc một bản phân phối) sẽ gặp phải tất cả các vấn đề để làm cho nó sạch 100%. Vì vậy, tôi không muốn sử dụng nó, ngay cả khi nó được cung cấp bởi HĐH.

Ghi chú

Nhưng có lẽ những gì bạn thực sự muốn thậm chí không cài đặt "cùng một lúc". Có lẽ nó là đủ, nếu bạn có thể xếp hàng các cài đặt, sau đó được thực hiện lần lượt từng cái một (lý tưởng mà không hỏi bất kỳ câu hỏi nào ở giữa). Và đó thực sự là một cái gì đó, một số hệ điều hành (phân phối) khác xử lý tốt hơn rất nhiều.


1
Trong khi chính xác, câu trả lời này đối với tôi quá dài dòng. Có người hỏi tại sao dịch vụ cài đặt hoạt động theo cách không có khả năng hiểu câu trả lời này.
gWaldo

2
@gWaldo: Được rồi, có lẽ bạn đúng ... Sau đó, một lần nữa, tôi không chỉ muốn nói "Thật phức tạp, tin tôi đi (kỳ). Dù sao thì bạn cũng sẽ không hiểu". Có lẽ OP (hoặc ai đó vấp phải câu hỏi này) thực sự quan tâm và một câu trả lời đi đến tận cùng của vấn đề sẽ giúp anh ta ước tính, nếu thực sự có nhiều vấn đề phức tạp liên quan để giải quyết vấn đề có vẻ dễ dàng bề mặt. Ai biết?
Chris Lercher

Rất đúng. Đó là một điểm hay.
gWaldo

Mặc dù tất cả các cuộc thảo luận về cách ly nghe có vẻ hợp lý, bạn có thể chạy nhiều trình cài đặt nếu chúng không sử dụng khung Windows Installer. Tôi chưa bao giờ bị hỏng khi chạy cạnh nhau ... Có lẽ tôi chỉ may mắn :) Đối với việc cài đặt hàng đợi, có những công cụ cho điều đó, nhưng được cung cấp CPU đa lõi (quái, CPU máy tính để bàn hiện có thể chạy 8 luồng ...), có vẻ như việc chạy chúng cạnh nhau sẽ là câu trả lời (mặc dù chúng vẫn có thể chiến đấu cho I / O).
Rytis

2
@Rytis: Tôi ước mình có cùng một may mắn :-) - Tôi đã có các trình cài đặt bị hỏng ngẫu nhiên ngay cả khi không chạy chúng đồng thời. Về đa lõi: Sẽ có một cách khác để sử dụng chúng: Bằng cách sử dụng nhiều lõi trong một quy trình cài đặt. Điều đó vẫn không phải lúc nào cũng có thể hoặc dễ dàng, nhưng có thể được phối hợp tốt hơn rất nhiều. Nhìn chung, tôi nghĩ rằng, trình tiết kiệm thời gian lớn nhất vẫn là, nếu toàn bộ quá trình cài đặt (hàng đợi) chỉ đặt câu hỏi ở đầu và cuối. Sau đó, bạn có thể lấy một tách cà phê, hoặc làm một cái gì đó khác trong khi cài đặt chạy (và sử dụng các lõi còn lại cho bất cứ điều gì bạn muốn làm.).
Chris Lercher

6

Đây là theo thiết kế, để tránh việc hai cài đặt thao tác cùng các tệp / thư mục / khóa đăng ký / v.v.; nó có thể đã được thực hiện theo những cách khác nhau, nhưng Microsoft đã đưa ra lựa chọn này.


Bất kỳ tài liệu tham khảo để hỗ trợ yêu cầu của bạn?
Aaron Digulla

1

Bạn có thể khởi động một số tệp MSI để cài đặt theo thứ tự nhanh chóng lần lượt từng tệp khác bằng tệp bó. Bạn không thể chạy hai tệp MSI cùng một lúc theo nghĩa là cả hai đều ghi vào đĩa cùng một lúc.

Lý do là một phần của bản cài đặt MSI được chạy dưới dạng "giao dịch" - một chuỗi các thay đổi được cam kết hoặc được khôi phục tùy thuộc vào việc các hành động trong danh sách giao dịch có hoàn thành không có lỗi hay không. Tất cả phải hoàn thành mà không có lỗi, và sau đó giao dịch được cam kết, nếu không, tất cả các thay đổi sẽ xảy ra. Theo sau, chỉ một giao dịch như vậy có thể được kích hoạt tại bất kỳ thời điểm nào.

Ở cấp độ MSI kỹ thuật, chỉ các hành động giữa các hành động tiêu chuẩn InstallInitialize và InstallFinalize trong InstallExecuteSequence được chạy như một giao dịch. Không có thay đổi hệ thống nào được cho là xảy ra bên ngoài những hành động này, nhưng đôi khi các tệp MSI được thiết kế rõ ràng để thực hiện các thay đổi trong các chuỗi khác.

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.