2009-11-02 29 views
5

Vì một số lý do, chúng tôi đang cung cấp một sản phẩm với GUI cài đặt riêng của chúng tôi, điều đó có nghĩa là chúng tôi sẽ chạy nền âm thanh cài đặt msi.Làm thế nào để tương tác một msi cài đặt âm thầm? (Dữ liệu tiến trình và hủy bỏ nó)

Bằng cách sử dụng API MSI "MsiInstallProduct", tôi có thể cài đặt sản phẩm một cách âm thầm, nhưng tôi không biết làm cách nào để có được dữ liệu tiến trình của quá trình cài đặt này và cách tôi có thể hủy nó.

Bất kỳ ai cũng có một số ý tưởng?

Trả lời

5

Dưới đây là một dự án mẫu mà dường như làm những gì bạn đang đề cập đến: http://www.codeproject.com/KB/cs/msiinterop.aspx

+0

Ngoài ra, hãy xem ** [câu trả lời này] (http://stackoverflow.com/a/24700795/129130) **. –

6

CẬP NHẬT: Công cụ này từ Wise đáng tiếc không thể tải về được nữa. Tôi không chắc chắn nếu nó là OK để phân phối nó hoặc. Nó dường như là một công cụ miễn phí được phân phối như một phần của bộ phần mềm Wise Package Studio chính của họ, nhưng tôi không nghĩ nó là nguồn mở. Tôi ước họ sẽ phát hành nó như một công cụ nguồn mở.

Sản phẩm đóng gói khôn ngoan đã bị ngừng do số lượng legal issues.


Tôi tin rằng bạn có thể nhận được sự tiến bộ qua API MSI, nhưng nếu tôi là bạn tôi sẽ chỉ hiển thị thanh tiến trình từ MSI bản thân sau khi viện dẫn cài đặt qua msiexec.exe.

MSI hỗ trợ một số mức cài đặt khác nhau (đầy đủ, hoàn toàn im lặng, GUI cơ bản, GUI giảm vv ...). Trong trường hợp của bạn, có vẻ như bạn muốn có một giao diện người dùng cơ bản. Điều này mang lại một thanh tiến trình, nơi bạn có thể ẩn các nút hủy, và tùy chọn hiển thị một hộp thoại hoàn modal:

Cài đặt âm thầm với thanh tiến trình, không có nút và không có hộp thoại modal hủy ở cuối:

msiexec.exe /I "Test.msi" /QB-! 

Để tránh phải xây dựng các dòng lệnh msiexec ngớ ngẩn này theo cách thủ công, hãy sử dụng công cụ tạo dòng lệnh msi từ Wise: http://www2.wise.com/filelib/WICLB.exe (không còn khả dụng).

enter image description here

+0

tôi sẽ giúp bạn có một cuộc bỏ phiếu nhưng không cho câu trả lời của tôi. Chúng tôi không sử dụng giao diện đồ họa vì nó không phù hợp với phong cách của sản phẩm, vì vậy chúng tôi cung cấp thanh tiến trình mát hơn cho nó, tất cả những gì tôi cần là dữ liệu tiến trình để đặt thanh của chúng tôi. GUI cơ bản của msi không được chấp nhận. Và tôi vẫn không thể hủy nó khỏi API thuần túy phải không? – redjackwong

+1

Đây là một ví dụ về cách làm việc với các bảng quảng cáo MSI và thanh tiến trình: http://sourceforge.net/projects/msiprogramming/. Nếu đây không phải là những gì bạn cần, có lẽ xem qua các tài nguyên tại: http: //www.installsite.org –

+0

Hãy nhớ nhấp vào nút "xem tất cả các tệp" (nếu không bạn chỉ nhận được bản trình diễn). –

3

Bạn cần phải xác định một handler UI bên ngoài sử dụng MsiSetExternalUI hoặc MsiSetExternalUIRecord trước MsiInstallProduct (sau này là đẹp hơn, nhưng có một MSI yêu cầu phiên bản cao hơn). Hàm bạn chỉ định sẽ được gọi cho mỗi thông điệp mà Windows Installer muốn bạn xử lý. Điều này sẽ cung cấp cho bạn các dữ liệu, và một cơ hội để trả lời cho nó để hủy bỏ. Nếu bạn yêu cầu MSI 4.5 hoặc mới hơn, bạn có thể sử dụng một DLL xử lý giao diện người dùng bên ngoài nhúng, mà không đòi hỏi một bootstrap.

+0

Cảm ơn bạn, MsiSetExternalUI không hoạt động trong trường hợp này ~ – redjackwong

Các vấn đề liên quan