Có cách nào để khiến msiexec lặp lại thành thiết bị xuất chuẩn thay vì đăng nhập vào một tập tin


8

Là một phần của đường ống phân phối liên tục, tôi muốn cài đặt msi trên một máy nhất định. msiexec cộng với psexec thực hiện điều này một cách hoàn hảo, nhưng có vẻ như msiexec chỉ có thể đăng nhập vào một tệp và tôi cần nó để đăng nhập vào stdout / stderr.

Ngay bây giờ, để lấy lại đầu ra vào phần mềm CI của chúng tôi, tôi sẽ phải thêm một bước thứ hai để lặp lại nội dung của nhật ký, điều này có vẻ hơi vô nghĩa.

Có ai phải đối mặt với vấn đề này trước đây (và khắc phục nó?)

Cảm ơn trước sự giúp đỡ ở đây.

dấu


Sử dụng tính năng ghi nhật ký tệp của msiexec và đọc lại từ đĩa. Một số quy trình msiexec.exe có thể được khởi chạy trong khi cài đặt và tôi nghĩ rằng bạn khó có thể chuyển hướng đầu ra của tất cả chúng. Bạn có thể thấy các quá trình msiexec.exe tự động sinh ra trong các bối cảnh bảo mật khác nhau và cũng để chạy các hành động tùy chỉnh. Một lon giun tôi muốn nói để đối phó.
Stein Åsmul

Câu trả lời:


5

Tôi đã kiểm tra lại điều này và đây là một số thông tin cập nhật :

Có thể triệt tiêu GUI MSI và đặt GUI bên ngoài do bên thứ ba triển khai. GUI bên ngoài này có thể nhận tin nhắn từ msiexec.exe khi nó thực hiện cài đặt. Điều này chủ yếu là để thực hiện một thanh tiến trình tùy chỉnh , nhưng có vẻ như bạn cũng có thể chặn hầu hết các thông báo lỗi và thông báo trạng thái khác: chức năng MsiSetExternalUI .

Tham số thú vị là dwMessageFilter . Ví dụ, bằng cách cài đặt, bạn chỉ có thể nhận được các thông báo lỗi xảy ra trong quá trình cài đặt - hoặc có vẻ như vậy. Tôi cho rằng điều này có thể là đủ cho hầu hết các mục đích.

INSTALLUI_HANDLER MsiSetExternalUI(
  _In_  INSTALLUI_HANDLER puiHandler,
  _In_  DWORD dwMessageFilter,
  _In_  LPVOID pvContext
);

Đáng tiếc hiện tại tôi không có mã mẫu cho việc này. Tôi sẽ kiểm tra điều này sau, khi tôi thiết lập hệ thống của mình đúng cách. Hàm MsiEnableLog là một lệnh gọi hàm liên quan sẽ cho phép đăng nhập vào tệp. Cập nhật: Đây là những gì trông giống như một ví dụ SDK đang hoạt động .

cấp độ giao diện dòng lệnh , bạn cũng có thể đặt ghi nhật ký để xóa bộ đệm ngay lập tức thành tệp bằng cách thêm ! tham số:

msiexec.exe /I "IsWiX.msi" /QN /L*V! "C:\msilog.log" 

Điều này có nghĩa là tệp nhật ký được ghi liên tục để không có bộ đệm nhật ký bị mất nếu msiexec.exe gặp sự cố. Chi phí là một trình cài đặt chậm hơn đáng kể do chi phí IO.


3

MsiExec chỉ có thể đăng nhập vào một tệp, vì vậy bạn sẽ phải tiếp tục lặp lại nội dung của tệp đó sau khi trình cài đặt kết thúc.


1

Tôi thà lưu trữ tệp nhật ký MSI trên hệ thống cục bộ vĩnh viễn ở một vị trí chung cho mỗi lần cài đặt, và sau đó chỉ cần đăng ký mã thoát của toàn bộ thiết lập. Nếu thiết lập báo cáo thành công, tệp nhật ký là không thú vị? Chỉ thêm "tiếng ồn"?

Ngoài ra, có một số hệ thống phân phối phần mềm sẽ nắm bắt thông tin nhật ký cho cài đặt MSI và lưu trữ tập trung. Một ví dụ là SCCM (microsofts đổi tên thành Hệ thống quản lý máy chủ - SMS).

Thiết lập ghi nhật ký cho tất cả các tệp MSI, xem phần "Toàn cầu cho tất cả các thiết lập trên máy": http://www.installsite.org/pages/en/msifaq/a/1022.htm


0

Tôi sử dụng kịch bản powershell sau đây. Nó vẫn yêu cầu ghi nhật ký vào một tệp nhưng nó cũng ghi nội dung trực tiếp vào thiết bị xuất chuẩn:

$main_process = Start-Process -FilePath ".\installer.exe" -ArgumentList "/S /V`"/qn /l*! output.log`"" -NoNewWindow -PassThru
$log_process = Start-Process "powershell" "Get-Content -Path output.log -Wait" -NoNewWindow -PassThru
$main_process.WaitForExit()
$log_process.Kill()
exit $main_process.ExitCode
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.