การดึงคุณสมบัติสาธารณะจากไฟล์ MSI


12

มีเครื่องมือหรือกลไกในการเรียกคืนคุณสมบัติสาธารณะที่มีอยู่จากไฟล์ Windows MSI หรือไม่

ผู้ค้าบางรายที่จัดหาไฟล์ MSI ไม่ได้จัดทำเอกสารเหล่านี้ด้วยตัวเองดังนั้นฉันอยากรู้ว่ามีวิธีการเปิดเผยข้อมูลเหล่านี้หรือไม่โดยไม่มีซอร์สโค้ด


8
ORCA ของ Microsoft , SuperORCA ของ Pantarayและการแก้ไข MSI อื่น ๆ ส่วนใหญ่จะช่วยให้คุณสามารถเรียกดู / แก้ไขตารางใด ๆ รวมถึงPropertyตาราง คุณมีกระบวนการทำงานหรือกรณีการใช้งานเฉพาะด้านนอกเพียงแค่ฉายใน MSI?
jscott

2
ฉันต้องการเข้าใจคุณสมบัติสาธารณะที่มีอยู่เพื่อให้สามารถส่งผ่านอย่างถูกต้องระหว่างการติดตั้งโดยไม่ต้องสอบถามผู้ขายหรือเอกสารประกอบ (เนื่องจากไม่สามารถทำได้) ด้วย Puppet เราสามารถส่งผ่านคุณสมบัติของ MSI ในระหว่างการติดตั้ง (เราตัด misexec.exe) ดังนั้นจึงมีประโยชน์ที่จะมีความสามารถนี้
Ken Barber

1
อาจมีคุณสมบัติสาธารณะอื่น ๆ ที่คุณสามารถส่งผ่านเพื่อควบคุมการติดตั้งแม้ว่าจะไม่ได้ระบุไว้ในตารางคุณสมบัติ คุณสมบัติสามารถตั้งค่าแบบไดนามิกขึ้นอยู่กับเงื่อนไขการค้นหารีจิสทรีเช่น ดังนั้นเอกสารผู้ขายจึงเป็นแหล่งข้อมูลที่ดีกว่า
Alexey Ivanov

คุณยังสามารถรันการติดตั้งด้วยการบันทึก verbose เพื่อดูว่าคุณสมบัติเปลี่ยนค่าได้อย่างไร
Alexey Ivanov

ขออภัยเกี่ยวกับความล่าช้า - ฉันได้ลอง Orca และมันน่าทึ่ง แต่ฉันยืนยันพฤติกรรมที่คุณอธิบาย @AlexeyIvanov - นั่นคือคุณสมบัติบางอย่างจะไม่ปรากฏขึ้น ฉันยืนยันสิ่งนี้ด้วย splunk.msi และเอกสารของมัน ฉันคาดเดาสิ่งที่ปรากฏใน Orca มีค่าเริ่มต้น แต่นี่ไม่ใช่รายการที่ยอมรับ คุณช่วยอธิบายเพิ่มเติมเล็กน้อยเกี่ยวกับวิธีการบันทึกข้อมูล verbose ได้หรือไม่?
Ken Barber

คำตอบ:


8

Lessmsiจัดเตรียมบรรทัดคำสั่งรวมถึงแอปพลิเคชันแบบโต้ตอบสำหรับการดึงข้อมูลคุณลักษณะใด ๆ จาก. msi

แบบโต้ตอบเปิด. msi จากนั้นไปที่มุมมองตารางและเลือกหรือพิมพ์ "คุณสมบัติ" อย่างไรก็ตามในขณะนี้ให้ชื่อคุณสมบัติมันไม่ได้ให้ค่าที่ถูกต้องสำหรับคุณสมบัติดังกล่าว (หรือฉันไม่ได้ค้นพบสถานที่ที่เหมาะสมที่จะมอง)

บรรทัดคำสั่งเพื่อแสดงรายการตารางคุณสมบัติที่คอนโซล (frustratingly ไม่สามารถจับภาพด้วยการ> output.csvเปลี่ยนเส้นทางแบบง่าย)

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

1

ระบุว่า MSI เก็บไฟล์คุณสมบัติสาธารณะในฐานข้อมูลภายในคุณสามารถค้นหาได้โดยใช้ VBScript และ SQL

นี่คือตัวอย่างสคริปต์ที่จะส่งคืนคุณสมบัติทั้งหมดที่เก็บไว้ในไฟล์ MSI เป็นแบบแผนที่จะใช้อักษรตัวใหญ่เพื่อกำหนดคุณสมบัติสาธารณะดังนั้นนั่นคือวิธีที่พวกเขามักจะระบุตัวตนได้


1

lessmsiเป็นเครื่องมือที่ยอดเยี่ยมที่ใช้งานได้อย่างแน่นอนถ้าคุณเต็มใจที่จะเปิด GUI และทำการตรวจสอบด้วยตนเอง อย่างไรก็ตามฉันจะบอกว่าคำสั่งต่อไปนี้ไม่สามารถแสดงคุณสมบัติทั้งหมดได้อย่างน่าเชื่อถือ:

lessmsi l -t Property <msi_name>

วิธีหนึ่งในการ (ดีกว่า) รับประกันว่าคุณจะได้รับคุณสมบัติที่เป็นไปได้ทั้งหมดคือทำการติดตั้งซ่อมแซมหรือถอนการติดตั้งด้วยไฟล์ MSI และเข้าสู่กระบวนการ คำสั่งต่อไปนี้บันทึกเฉพาะคุณสมบัติและไม่มีอะไรอื่น:

<msi_name> /lp! <msi_property_logfile>

คำสั่งดังกล่าวเทียบเท่ากับ:

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

วิธีการที่ฉันชอบคือการไม่ติดตั้ง / ลบ / ซ่อมแซม (และแยกไฟล์ออกมาแทน) ข้อดีวิธีนี้มีมากกว่าlessmsiคือมันไม่จำเป็นต้องมียูทิลิตี้ของบุคคลที่สาม (เช่นlessmsi ) และมันไม่ต้องการให้คุณยุ่งกับการติดตั้งใด ๆ เนื่องจากคุณมีพื้นที่ดิสก์เพียงพอที่จะติดตั้งโปรแกรมคุณสามารถทำสิ่งต่อไปนี้

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

โปรดทราบว่า<absolute_path_to_extract_to>สามารถชี้ไปที่ไดเรกทอรีที่ไม่มีอยู่ (คำสั่งจะสร้างไดเรกทอรีที่จำเป็นหรือล้มเหลว)

หากคุณไม่ชอบ UI การติดตั้งด้วยเหตุผลใดก็ตามคุณสามารถต่อท้าย/qrตัวเลือกซึ่งจะ 'ลด' และอาจกำจัด UI โดยไม่ทำให้กระบวนการบันทึกทรัพย์สินเสียหาย ได้รับการเตือนอย่างไรก็ตาม - ถ้าคุณ "ต่ำ" กว่า UI ที่ลดลง (viz. /qb| /passiveหรือ/qn| /quiet) คุณ<msi_property_logfile>อาจขาดคุณสมบัติบางอย่าง


ปัญหาของวิธีนี้คือ: คุณต้องเรียกใช้โปรแกรมติดตั้ง แม้ว่าคุณจะติดตั้งไปยังเป้าหมายที่ไม่เป็นมาตรฐานคุณก็ยังสับสนกับรีจิสเตอร์
วัง

0

วิธีที่ฉันทำตอนนี้คือการใช้โมดูล Carbon Powershell ในการติดตั้งโมดูลประเภท:

Install-Module -Name 'Carbon' -AllowClobber

จากนั้นก็ง่ายๆ

msi your_msi_path.msi

ตัวอย่าง:

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

ฉันคิดว่าตอนนี้อาจเป็นวิธีที่ดีที่สุดในการทำเช่นนี้โดยใช้ PowerShell นี่คือสคริปต์ที่ทำงานได้ดีจริงๆ: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c


คำตอบนี้เป็นเพียงลิงค์ซึ่งสามารถเปลี่ยน / หายไปได้
David Makogon

มีคำตอบอื่น ๆ ที่เป็นเพียงการเชื่อมโยง ฉันรู้สึกไม่สะดวกสบายในการคัดลอกและวางโค้ดของคนอื่นฉันคิดว่าคำตอบของฉันให้ทางเลือกอื่นและฉันไม่เข้าใจการลงคะแนนเสียง
gigi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.