Mengambil properti publik dari file MSI


12

Apakah ada alat atau mekanisme untuk mengambil properti publik yang tersedia dari file Windows MSI?

Beberapa vendor yang memasok file MSI tidak mendokumentasikannya sendiri, jadi saya ingin tahu apakah ada cara untuk mengekspos ini tanpa kode sumber.


8
ORCA Microsoft , SuperORCA Pantaray, dan sebagian besar setiap pengeditan MSI lainnya memungkinkan Anda untuk menelusuri / mengedit tabel apa pun termasuk Propertytabel. Apakah Anda memiliki alur kerja khusus atau kasus penggunaan di luar yang baru saja ditemukan di MSI?
jscott

2
Saya ingin memahami properti publik yang tersedia sehingga dapat dilewati secara akurat selama instalasi, tanpa harus menanyakan vendor atau dokumentasi (karena ini tidak selalu memungkinkan). Dengan Puppet, kita dapat mengirimkan properti MSI selama instalasi (kita membungkus misexec.exe), jadi berguna untuk memiliki kemampuan ini.
Ken Barber

1
Mungkin ada properti publik lain yang bisa Anda lewati untuk mengontrol instalasi walaupun mereka tidak tercantum dalam tabel Properties. Properti dapat diatur secara dinamis tergantung pada suatu kondisi, misalnya pencarian Registry. Jadi dokumentasi vendor adalah sumber informasi yang lebih baik.
Alexey Ivanov

Anda juga dapat menjalankan instalasi dengan verbose logging untuk melihat bagaimana properti mengubah nilainya.
Alexey Ivanov

Maaf tentang keterlambatan - Saya sudah mencoba Orca dan yang menarik, tapi saya sudah mengkonfirmasi perilaku yang Anda jelaskan @AlexeyIvanov - yaitu, beberapa properti tidak akan muncul. Saya mengkonfirmasi ini dengan splunk.msi dan dokumennya. Saya menduga yang muncul di Orca memiliki default, tetapi ini bukan daftar kanonik. Bisakah Anda menjelaskan lebih banyak tentang metodologi logging verbose?
Ken Barber

Jawaban:


8

Lessmsi menyediakan baris perintah serta aplikasi interaktif untuk mengambil atribut apa pun dari .msi.

Secara interaktif, buka .msi lalu buka Tampilan tabel dan pilih atau ketik "Properti". Namun sementara ini memberikan nama properti itu tidak memberikan nilai yang valid untuk properti tersebut. (Atau saya belum menemukan tempat yang tepat untuk mencari.)

Baris perintah untuk mencantumkan tabel Properti ke konsol (dengan frustrasi, tidak dapat ditangkap dengan > output.csvpengalihan sederhana )

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

1

Karena file MSI menyimpan properti publik dalam database internal, Anda sebenarnya bisa menanyakannya menggunakan VBScript dan SQL.

Berikut ini contoh skrip yang akan mengembalikan semua properti yang disimpan dalam file MSI. Merupakan konvensi untuk menggunakan huruf kapital untuk mendefinisikan properti publik, sehingga biasanya mereka dapat diidentifikasi.


1

lessmsi adalah alat yang hebat yang pasti berfungsi di sini jika Anda bersedia membuka GUI dan melakukan penyelidikan manual. Namun, saya akan mengatakan, bahwa perintah berikut ini tidak dapat diandalkan menampilkan semua properti:

lessmsi l -t Property <msi_name>

Salah satu cara untuk (lebih baik) menjamin bahwa Anda mendapatkan semua properti yang mungkin adalah dengan benar-benar melakukan instalasi, perbaikan, atau uninstall dengan file MSI dan mencatat prosesnya. Perintah berikut hanya mencatat properti dan tidak ada yang lain:

<msi_name> /lp! <msi_property_logfile>

Perintah di atas setara dengan:

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

Metode yang saya sukai, bagaimanapun, adalah untuk tidak benar - benar menginstal / menghapus / memperbaiki (dan sebagai gantinya hanya mengekstrak). Kelebihan metode ini dibandingkan lessmsi adalah tidak memerlukan utilitas pihak ke-3 (mis. Lessmsi ), dan tidak mengharuskan Anda mengacaukan instalasi apa pun. Mengingat Anda memiliki cukup ruang disk untuk menginstal program, Anda dapat melakukan:

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

Perhatikan bahwa <absolute_path_to_extract_to>can menunjuk ke direktori yang tidak ada (perintah akan membuat direktori yang diperlukan atau gagal).

Jika Anda membenci UI instalasi karena alasan apa pun, Anda dapat menambahkan /qropsi, yang akan 'mengurangi' dan mungkin menghilangkan UI tanpa mengganggu proses logging properti. Namun berhati-hatilah - jika Anda "lebih rendah" dari UI yang dikurangi (yaitu /qb| /passiveatau /qn| /quiet), Anda <msi_property_logfile>mungkin kehilangan beberapa properti.


Masalah dari metode ini adalah: Anda harus benar-benar menjalankan installer. Meskipun Anda menginstalnya ke targetdir yang tidak standar, Anda masih mengacaukan register.
Wang

0

Cara saya melakukannya sekarang adalah dengan menggunakan modul Carbon Powershell. Untuk menginstal jenis modul:

Install-Module -Name 'Carbon' -AllowClobber

Maka sederhananya

msi your_msi_path.msi

Contoh:

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

Saya pikir sekarang mungkin cara terbaik untuk melakukannya adalah menggunakan PowerShell. Berikut ini adalah skrip yang melakukan pekerjaan dengan sangat baik: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c


Jawaban ini hanyalah tautan, yang dapat mengubah / menghilang.
David Makogon

Ada jawaban lain yang hanya berupa tautan. Saya merasa tidak nyaman menyalin dan menempelkan kode orang lain. Saya pikir jawaban saya memberikan opsi alternatif dan saya benar-benar tidak mengerti suara turun.
gigi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.