Lấy các thuộc tính công cộng từ một tệp MSI


12

Có công cụ hoặc cơ chế nào để truy xuất các thuộc tính công khai có sẵn từ tệp Windows MSI không?

Một số nhà cung cấp cung cấp các tệp MSI không tự ghi lại những tài liệu này, vì vậy tôi tò mò muốn xem liệu có cách nào để lộ những thứ này mà không cần mã nguồn hay không.


8
ORCA của Microsoft , SuperORCA của Pantaray và hầu hết mọi chỉnh sửa MSI khác sẽ cho phép bạn duyệt / chỉnh sửa bất kỳ bảng nào kể cả Propertybảng. Bạn đã có một luồng công việc cụ thể hoặc trường hợp sử dụng bên ngoài chỉ chọc vào MSI chưa?
jscott

2
Tôi muốn hiểu các thuộc tính công cộng có sẵn để chúng có thể được chuyển chính xác trong quá trình cài đặt mà không phải truy vấn nhà cung cấp hoặc tài liệu (vì điều này không phải lúc nào cũng có thể). Với Puppet, chúng ta có thể chuyển các thuộc tính MSI trong khi cài đặt (chúng ta gói mothyec.exe), vì vậy thật tiện lợi khi có khả năng này.
Ken Barber

1
Có thể có các thuộc tính công khai khác mà bạn có thể vượt qua để kiểm soát cài đặt mặc dù chúng không được liệt kê trong bảng Thuộc tính. Thuộc tính có thể được thiết lập động tùy thuộc vào một điều kiện, ví dụ tìm kiếm Registry. Vì vậy, tài liệu nhà cung cấp là nguồn thông tin tốt hơn.
Alexey Ivanov

Bạn cũng có thể chạy cài đặt với ghi nhật ký chi tiết để xem các thuộc tính thay đổi giá trị của chúng như thế nào.
Alexey Ivanov

Xin lỗi về sự chậm trễ - Tôi đã thử Orca và sự hấp dẫn của nó, nhưng tôi đã xác nhận hành vi mà bạn mô tả @AlexeyIvanov - nghĩa là, một số thuộc tính sẽ không xuất hiện. Tôi đã xác nhận điều này với splunk.msi và tài liệu của nó. Tôi đoán những cái xuất hiện trong Orca có mặc định, nhưng đây không phải là một danh sách kinh điển. Bạn có thể giải thích thêm một chút về phương pháp ghi nhật ký chi tiết không?
Ken Thợ cắt tóc

Câu trả lời:


8

Lessmsi cung cấp một dòng lệnh cũng như ứng dụng tương tác để lấy bất kỳ thuộc tính nào từ .msi.

Tương tác, mở .msi sau đó đi đến Chế độ xem bảng và chọn hoặc nhập "Thuộc tính". Tuy nhiên, trong khi điều này cung cấp tên tài sản, nó không cung cấp các giá trị hợp lệ cho tài sản nói trên. (Hoặc tôi chưa tìm ra đúng nơi để tìm.)

Dòng lệnh để liệt kê bảng Thuộc tính vào bảng điều khiển (bực bội, không thể được ghi lại bằng > output.csvchuyển hướng đơn giản )

lessmsi l -t Property ...\path\to\setup.msi

1

Cho rằng tệp MSI lưu trữ các thuộc tính công khai trong cơ sở dữ liệu nội bộ, bạn thực sự có thể truy vấn chúng bằng VBScript và SQL.

Đây là một kịch bản ví dụ sẽ trả về tất cả các thuộc tính được lưu trữ trong tệp MSI. Đó là quy ước sử dụng chữ in hoa để xác định các thuộc tính công cộng, vì vậy đó là cách chúng thường được nhận dạng.


1

lessmsi là một công cụ tuyệt vời chắc chắn hoạt động ở đây nếu bạn sẵn sàng mở GUI của nó và thực hiện một số điều tra thủ công. Tuy nhiên, tôi sẽ nói rằng lệnh sau không thể hiện một cách đáng tin cậy tất cả các thuộc tính:

lessmsi l -t Property <msi_name>

Một cách để (tốt hơn) đảm bảo rằng bạn có được tất cả các thuộc tính có thể là thực sự cài đặt, sửa chữa hoặc gỡ cài đặt với tệp MSI và ghi lại quá trình. Lệnh sau chỉ ghi lại các thuộc tính và không có gì khác:

<msi_name> /lp! <msi_property_logfile>

Lệnh trên tương đương với:

msiexec /lp! <msi_property_logfile> /i <msi_name>

Tuy nhiên, phương pháp ưa thích của tôi là không thực sự cài đặt / gỡ bỏ / sửa chữa (và chỉ đơn giản là giải nén thay thế). Ưu điểm của phương pháp này so với lessmsi là nó không yêu cầu tiện ích của bên thứ 3 (tức là lessmsi ) và nó không yêu cầu bạn phải lộn xộn với bất kỳ cài đặt nào. Cho rằng bạn có đủ dung lượng đĩa để cài đặt chương trình, bạn có thể làm:

msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>

Lưu ý rằng <absolute_path_to_extract_to>có thể trỏ đến một thư mục không tồn tại (lệnh sẽ tạo các thư mục cần thiết hoặc thất bại).

Nếu bạn ghét UI cài đặt vì bất kỳ lý do gì bạn có thể nối thêm /qrtùy chọn, điều này sẽ 'giảm' và có thể loại bỏ UI mà không làm suy yếu quá trình ghi nhật ký thuộc tính. Tuy nhiên, được cảnh báo - nếu bạn đi "thấp hơn" so với giao diện người dùng bị giảm (viz. /qb| /passiveHoặc /qn| /quiet), bạn <msi_property_logfile>có thể thiếu một số thuộc tính.


Vấn đề của phương pháp này là: bạn phải thực sự chạy trình cài đặt. Ngay cả khi bạn cài đặt nó vào một mục tiêu không chuẩn, bạn vẫn làm hỏng các thanh ghi.
Vương

0

Cách tôi đang làm bây giờ là sử dụng mô-đun Carbon Powershell. Để cài đặt loại mô-đun:

Install-Module -Name 'Carbon' -AllowClobber

Sau đó, đơn giản

msi your_msi_path.msi

Thí dụ:

msi putty-64bit-0.70-installer.msi

ProductName                 ProductVersion Manufacturer ProductCode                         

-----------                 -------------- ------------ -----------                         

PuTTY release 0.70 (64-bit) 0.70.0.0       Simon Tatham 45b3032f-22cc-40cd-9e97-4da7095fa5a2

-1

Tôi nghĩ rằng bây giờ có lẽ cách tốt nhất để làm điều đó là sử dụng powershell. Đây là một kịch bản thực hiện công việc thực sự tốt: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperIES-09d9c87c


Câu trả lời này chỉ là một liên kết, có thể thay đổi / biến mất.
David Makogon

Có những câu trả lời khác chỉ đơn giản là một liên kết. Tôi không cảm thấy thoải mái khi sao chép và dán mã người khác. Tôi nghĩ rằng câu trả lời của tôi đưa ra một lựa chọn thay thế và tôi thực sự không hiểu được việc bỏ phiếu.
gigi
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.