Saya perlu untuk menemukan produk GUID untuk diinstal MSI file dalam rangka untuk melakukan pemeliharaan seperti menambal
, uninstall
(bagaimana-untuk uninstall) dan juga untuk tujuan audit
.
Untuk kode upgrade retrieval: https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095
Versi Pendek
Informasi di bawah ini telah tumbuh secara signifikan dari waktu ke waktu dan mungkin telah menjadi terlalu rumit. Cara dapatkan kode produk cepat? (empat pendekatan):
Menggunakan Powershell "satu-liner"
Gulir ke bawah untuk screenshot dan langkah-demi-langkah. Disclaimer juga di bawah ini - kecil atau moderat risiko tergantung pada siapa anda bertanya. OK bekerja untuk saya. Setiap memperbaiki diri dipicu oleh pilihan ini umumnya harus mungkin untuk membatalkan. The paket pemeriksaan integritas dipicu tidak menambahkan beberapa event log "kebisingan" meskipun. Catatan!
IdentifyingNumber
adalah theProductCode
(WMI keganjilan).
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
Menggunakan VBScript
Catatan ' Lookup
Beberapa bersumpah dengan melihat hal-hal dalam registri. Tidak dianjurkan pendekatan - aku suka pergi melalui Api tepat (atau dengan kata lain: fungsi OS panggilan). Selalu ada yang aneh pengecualian hanya menyumbang oleh internal dari API-pelaksanaan:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
Asli MSI File / WiX Sumber
Anda dapat menemukan Kode
di Properti tabel
dari setiap file MSI (dan properti lainnya juga). Namun, GUID bisa dibayangkan (jarang) dapat diganti dengan mengubah diterapkan pada waktu menginstal dan karenanya tidak cocok GUID produk ini terdaftar di bawah (mendekati 1 dan 2 di atas akan melaporkan real kode produk - yang terdaftar dengan Windows - di langka seperti skenario).
Anda perlu alat untuk melihat MSI file. Melihat ke arah bawah dari jawaban berikut untuk daftar alat gratis yang dapat anda download (atau melihat pilihan cepat di bawah ini): https://stackoverflow.com/questions/48482545/how-can-i-compare-the-content-of-two-or-more-msi-files/48482546#48482546
UPDATE: Untuk kenyamanan dan perlu untuk kecepatan :-), download SuperOrca tanpa penundaan dan ribut-ribut dari ini langsung-download hotlink - alat ini cukup baik untuk mendapatkan pekerjaan yang dilakukan - install, buka MSI dan langsung pergi ke Properti tabel dan menemukan ProductCode
row (mohon selalu periksa virus langsung-download hotlink - jelas - anda dapat menggunakan virustotal.com untuk melakukannya - online scan memanfaatkan puluhan anti-virus dan malware suites untuk memindai apa yang anda upload).
Orca adalah Microsoft's sendiri alat itu dipasang dengan Visual dan Windows SDK. Mencoba mencari
Orca-x86_en-kita.msi
- bawahProgram Files (x86)
dan menginstal MSI jika ditemukan.Dan di bawah ini anda akan menemukan jawaban asli yang "secara organik tumbuh" ke banyak detail. Mungkin melihat "Uninstall Paket MSI" bagian di bawah ini jika ini adalah tugas yang anda butuhkan untuk melakukan.
Mengambil Kode Produk
UPDATE: Jika anda juga perlu kode upgrade, memeriksa jawaban ini: https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095 (mengambil produk terkait kode, kode upgrade & nama produk yang di tabel keluaran - mirip dengan salah satu di bawah ini).
- Dapat't menggunakan PowerShell? Lihat "Alternatif Alat" bagian di bawah ini.
- Mencari untuk uninstall? Lihat "Uninstall MSI paket" bagian di bawah ini. Fire up Powershell (tahan tombol Windows, tekan R, lepaskan tombol Windows, ketik "powershell", lalu tekan OK) dan jalankan perintah berikut untuk mendapatkan daftar diinstal paket MSI kode produk bersama dengan cache lokal paket jalan dan nama produk (memaksimalkan jendela PowerShell untuk menghindari terpotong nama). Sebelum menjalankan baris perintah ini, silakan baca disclaimer di bawah ini (tidak berbahaya, hanya beberapa potensi gangguan). Bagian 3 di bawah "Alternatif Alat" menunjukkan alternatif non-WMI cara untuk mendapatkan informasi yang sama menggunakan VBScript. Jika anda mencoba untuk uninstall paket ada bagian di bawah ini dengan beberapa contoh msiexec.exe baris perintah:
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
The output harus sama dengan ini: Catatan! Untuk beberapa alasan aneh yang "product kode" ini disebut sebagai "IdentifyingNumber" di WMI. Jadi dengan kata lain dalam gambar di atas IdentifyingNumber adalah ProductCode. Jika anda perlu jalankan query ini dari jarak jauh terhadap banyak komputer remote*, melihat "Mengambil Kode Produk Dari Komputer Remote*" bagian di bawah ini.
DISCLAIMER (penting, harap dibaca sebelum menjalankan perintah!): Karena aneh Microsoft desain, setiap WMI panggilan untuk
Win32_Product
(seperti perintah PowerShell di bawah ini) akan memicu validasi paket estate. Selain menjadi cukup lambat, hal ini dapat dalam kasus yang jarang terjadi memicu MSI memperbaiki diri. Ini bisa menjadi paket kecil atau sesuatu besar - seperti Visual Studio. Dalam kebanyakan kasus ini tidak terjadi - tapi ada risiko. Don't menjalankan perintah ini tepat sebelum yang penting pertemuan - hal ini tidak pernah berbahaya (read-only), tapi mungkin menyebabkan perbaikan lama dalam kasus yang sangat langka (saya pikir anda dapat membatalkan perbaikan diri juga - kecuali secara aktif dicegah dengan paket tersebut, tetapi akan restart jika anda menelepon Win32_Product lagi dan ini akan bertahan sampai anda membiarkan diri-perbaikan selesai - kadang-kadang itu mungkin akan terus bahkan jika anda tidak membiarkan hal itu selesai: https://stackoverflow.com/questions/5501028/how-can-i-determine-what-causes-repeated-windows-installer-self-repair/6066263#6066263).Dan hanya untuk catatan: beberapa orang melaporkan mereka log peristiwa mengisi dengan MsiInstaller Pemberi 1035 entri (lihat kode kepala's jawaban) - rupanya disebabkan oleh WMI query untuk kelas Win32_Product (secara pribadi saya belum pernah melihat hal ini). Ini adalah tidak berhubungan langsung dengan perintah Powershell yang disarankan di atas, itu adalah dalam konteks penggunaan umum dari WIM kelas Win32_Product. Anda juga bisa mendapatkan output dalam bentuk daftar (bukan tabel):
get-wmiobject -class Win32_Product
Secara teori, anda harus dapat menentukan nama komputer remote sebagai bagian dari perintah itu sendiri. Berikut ini adalah perintah yang sama seperti di atas diatur untuk dijalankan pada mesin "RemoteMachine" (-ComputerName RemoteMachine
bagian ditambahkan):
get-wmiobject Win32_Product -ComputerName RemoteMachine | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
Ini mungkin bekerja jika anda menjalankan dengan domain hak admin pada domain yang tepat. Dalam kelompok kerja lingkungan (small office / home jaringan), anda mungkin harus menambahkan kredensial pengguna langsung ke WMI panggilan untuk membuatnya bekerja. Selain itu, koneksi remote di WMI dipengaruhi oleh (setidaknya) satu Windows Firewall, DCOM pengaturan, dan User Account Control (UAC) (plus tambahan non-Microsoft faktor - misalnya nyatafirewall, perangkat lunak pihak ketiga firewall, perangkat lunak keamanan dari berbagai jenis**, dll...). Apakah itu akan bekerja atau tidak tergantung pada tepat anda setup.
PowerShell membutuhkan .NET framework untuk diinstal (saat ini dalam versi 3.5.1 tampaknya? Juli, 2017). Sebenarnya PowerShell aplikasi itu sendiri juga dapat hilang dari mesin bahkan jika .NET diinstal. Akhirnya saya percaya PowerShell dapat disabled atau terkunci dengan berbagai sistem kebijakan dan hak-hak istimewa. Jika hal ini terjadi, anda dapat mencoba beberapa cara lain untuk mengambil kode produk. Saya alternatif yang lebih disukai adalah VBScript - cepat dan fleksibel (tetapi juga dapat terkunci pada mesin tertentu, dan scripting selalu sedikit lebih terlibat daripada menggunakan alat-alat).
wbemtest.exe
. wbemtest.exe
(Tahan tombol Windows, tekan R, lepaskan tombol Windows, ketik "wbemtest.exe", lalu tekan OK). PILIH IdentifyingNumber,Nama,Versi DARI Win32_Product
dan klik "Gunakan" (atau setara - alat yang akan terlokalisasi). WMIExplorer.exe
PILIH IdentifyingNumber,Nama,Versi DARI Win32_Product
dan tekan Execute. msiinfo.csv
. ' Retrieve all ProductCodes (with ProductName and ProductVersion)
Set fso = CreateObject("Scripting.FileSystemObject")
Set output = fso.CreateTextFile("msiinfo.csv", True, True)
Set installer = CreateObject("WindowsInstaller.Installer")
On Error Resume Next ' we ignore all errors
For Each product In installer.ProductsEx("", "", 7)
productcode = product.ProductCode
name = product.InstallProperty("ProductName")
version=product.InstallProperty("VersionString")
output.writeline (productcode & ", " & name & ", " & version)
Next
output.Close
aku't berpikir lebih jauh tujuan umum pilihan untuk mengambil kode produk saat ini, mohon tambahkan jika anda tahu dari setiap. Hanya mengedit inline daripada menambahkan terlalu banyak komentar silahkan.
Anda pasti bisa mengakses informasi ini dari dalam aplikasi anda dengan memanggil [MSI otomatisasi interface][1] (COM based) ATAU [C++ MSI installer fungsi][14] (Win32 API). Atau bahkan menggunakan WMI query dari dalam aplikasi anda seperti yang anda lakukan dalam contoh di atas menggunakan
PowerShell
,wbemtest.exe
atauWMIExplorer.exe
.Uninstall MSI Paket
Jika apa yang anda ingin lakukan adalah untuk uninstall paket MSI anda menemukan kode produk, anda dapat melakukan ini sebagai berikut menggunakan command prompt (mencari cmd.exe, klik kanan dan jalankan sebagai admin): 1: Dasar, interaktif uninstall tanpa login (cepat dan mudah):
msiexec.exe /x {00000000-0000-0000-0000-00000000000C}
Cepat Parameter Penjelasan:
/X = run uninstall sequence
{00000000-0000-0000-0000-00000000000C} = product code for product to uninstall
Anda juga dapat mengaktifkan (verbose) penebangan dan jalankan dalam mode silent jika anda ingin, menyebabkan kita untuk opsi 2: Pilihan 2: Diam uninstall dengan verbose logging (baik untuk batch file):
msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress
Cepat Parameter Penjelasan:
/X = run uninstall sequence
{00000000-0000-0000-0000-00000000000C} = product code for product to uninstall
/QN = run completely silently
/L*V "C:\My.log"= verbose logging at specified path
REBOOT=ReallySuppress = avoid unexpected, sudden reboot
UPDATE silahkan cari jawaban baru tentang bagaimana untuk menemukan kode upgrade untuk menginstal paket-paket bukan secara manual mencari kode dalam file MSI. Untuk diinstal paket ini jauh lebih handal. Jika paket tidak diinstal, anda masih perlu untuk melihat dalam MSI file (atau file sumber yang digunakan untuk menyusun MSI) untuk menemukan kode upgrade. Meninggalkan yang lebih tua di bagian di bawah ini: Jika anda ingin mendapatkan UpgradeCode atau MSI lain sifat, anda dapat membuka cache instalasi MSI untuk produk dari lokasi yang ditentukan oleh "LocalPackage" pada gambar di atas menunjukkan (sesuatu seperti:
C:\WINDOWS\Installer\50c080ae.msi
- itu adalah file hex, nama yang unik pada masing-masing sistem). Kemudian anda melihat di "Properti tabel" untuk UpgradeCode (hal ini dimungkinkan untuk UpgradeCode harus didefinisikan ulang dalam mengubah - untuk memastikan anda mendapatkan nilai yang tepat yang anda butuhkan untuk mengambil kode programatik dari sistem - saya akan memberikan script untuk ini tak lama. Namun, the UpgradeCode ditemukan di cache MSI umumnya benar). Untuk membuka cache file MSI, menggunakan [Orca][18] atau yang lain pengemasan alat. Berikut adalah pembahasan dari alat yang berbeda (salah satu dari mereka akan melakukan): https://stackoverflow.com/questions/1544292/what-installation-product-to-use-installshield-wix-wise-advanced-installer/1546941#1546941. Jika anda don't memiliki alat tersebut dipasang, tercepat anda bertaruh mungkin untuk mencoba Super Orca (hal ini sederhana untuk digunakan, tetapi tidak diuji secara luas oleh saya). UPDATE: di sini adalah jawaban baru dengan informasi tentang berbagai produk gratis yang dapat anda gunakan untuk melihat file MSI: https://stackoverflow.com/questions/48482545/how-can-i-compare-the-content-of-two-or-more-msi-files/48482546#48482546 Jika anda memiliki Visual Studio diinstal, mencoba mencariOrca-x86_en-kita.msi
- di bawahProgram Files (x86)
- dan menginstalnya (ini adalah Microsoft's sendiri, resmi MSI viewer dan editor). Kemudian menemukan Orca di start menu. Pergi waktu dalam waktu singkat :-). Secara teknis Orca diinstal sebagai bagian dari Windows SDK (bukan Visual), tetapi Windows SDK dibundel dengan Visual Studio menginstal. Jika anda don't memiliki Visual Studio diinstal, mungkin anda tahu seseorang yang tidak? Hanya mereka cari selama ini MSI dan mengirim anda (lebih kecil setengah file mb) - harus membawa mereka detik. UPDATE: anda membutuhkan beberapa file CAB serta MSI - ini ditemukan dalam folder yang sama dimana MSI ditemukan. Jika tidak, anda selalu dapat men-download Windows SDK (itu adalah gratis, tetapi lebih besar - dan segala sesuatu yang anda install akan memperlambat PC anda). Saya tidak yakin bagian mana dari SDK menginstal Orca MSI. Jika anda melakukannya, silakan edit dan tambahkan detail di sini.
Topik yang serupa (untuk referensi dan akses mudah - aku harus membersihkan daftar ini):
Jika anda memiliki terlalu banyak installer untuk menemukan apa yang anda cari dengan mudah, berikut ini adalah beberapa powershell untuk memberikan filter dan sempit itu turun sedikit demi nama tampilan.
$filter = "*core*sdk*"; (Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall).Name | % { $path = "Registry::$_"; Get-ItemProperty $path } | Where-Object { $_.DisplayName -like $filter } | Select-Object -Property DisplayName, PsChildName