Bagaimana saya dapat menemukan produk GUID dari aplikasi yang diinstal MSI setup?

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.

Larutan

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):

  1. 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 the ProductCode (WMI keganjilan).

get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

Mulai cepat dari Powershell: tahan Windows key, tekan R, ketik "powershell", lalu tekan Enter 2. Menggunakan VBScript

Dijelaskan berikut di bawah "Alternatif Alat" (bagian 3). Pilihan ini mungkin lebih aman dari Powershell untuk alasan yang dijelaskan secara rinci di bawah ini. Pada dasarnya itu adalah (banyak) lebih cepat dan tidak mampu memicu MSI memperbaiki diri karena tidak pergi melalui WMI (mengakses [MSI API COM][1] langsung di terik kecepatan). Namun, itu lebih terlibat dari Powershell pilihan (beberapa baris kode). 3. 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
  1. 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 - bawah Program 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

Dalam hal ini output yang mirip dengan ini:

Mengambil Kode Produk Dari Komputer Remote

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.

  • [Pengaturan Remote Koneksi WMI][10]
  • [Yang menghubungkan ke WMI dari jarak Jauh dengan PowerShell][11] UPDATE: bagian Yang luas pada remote WMI berjalan dapat ditemukan dalam jawaban ini: https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095. Tampaknya aturan firewall dan penindasan UAC prompt melalui registry tweak yang bisa membuat hal-hal bekerja dalam kelompok kerja lingkungan jaringan. Tidak dianjurkan perubahan jam-bijaksana, tapi itu bekerja untuk saya.

    Alternatif Alat

    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).

  1. Let's mulai dengan a built-in Windows WMI alat: wbemtest.exe.
  • Meluncurkan wbemtest.exe (Tahan tombol Windows, tekan R, lepaskan tombol Windows, ketik "wbemtest.exe", lalu tekan OK).
  • Klik connect dan OK (namespace default untuk root\cimv2), dan klik "connect" lagi.
  • Klik "Query" dan ketik ini WQL perintah (SQL rasa): PILIH IdentifyingNumber,Nama,Versi DARI Win32_Product dan klik "Gunakan" (atau setara - alat yang akan terlokalisasi).
  • Sampel output screenshot (terpotong). Tidak terbagus format, tetapi anda bisa mendapatkan data yang anda butuhkan. IdentifyingNumber adalah MSI kode produk:
  1. Selanjutnya, anda dapat mencoba kustom, lebih penuh fitur WMI alat seperti WMIExplorer.exe
  • Ini tidak termasuk dalam Windows. Ini adalah alat yang sangat baik, namun. Dianjurkan.
  • Check it out di: https://github.com/vinaypamnani/wmie2/releases Meluncurkan alat, klik Connect, klik ganda ROOT\CIMV2
  • Dari "Query tab", ketik query berikut PILIH IdentifyingNumber,Nama,Versi DARI Win32_Product dan tekan Execute.
  • Screenshot dilewati, aplikasi ini memerlukan terlalu banyak layar real estat.
  1. Akhirnya anda dapat mencoba VBScript untuk mengakses informasi melalui MSI otomatisasi antarmuka (core fitur Windows - ini adalah yang tidak berhubungan dengan WMI).
  • Copy script di bawah ini dan paste ke *.vbs file di desktop anda, dan mencoba untuk menjalankannya dengan mengklik ganda. Desktop anda harus bisa ditulisi untuk anda, atau anda bisa menggunakan yang lain yang dapat ditulisi lokasi.
  • Ini adalah tidak besar VBScript. Terseness telah disukai atas kesalahan penanganan dan kelengkapan, tetapi harus melakukan pekerjaan dengan kompleksitas minimum.
  • Output file yang dibuat dalam folder di mana anda menjalankan script dari (folder harus ditulisi). Output file ini disebut msiinfo.csv.
  • Double klik file tersebut untuk membuka dalam aplikasi spreadsheet, pilih koma sebagai pemisah pada impor - ATAU - hanya membuka file di Notepad atau text viewer.
  • Pembukaan dalam spreadsheet akan memungkinkan canggih menyortir fitur.
  • Script ini dapat dengan mudah disesuaikan untuk menunjukkan [jumlah yang signifikan dari rincian lebih lanjut tentang instalasi MSI][13]. Demonstrasi ini dapat ditemukan di sini: https://stackoverflow.com/questions/28963089/how-to-find-out-which-products-are-installed-newer-product-are-already-install/28971679#28971679.
' 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 atau WMIExplorer.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

Ada referensi yang komprehensif untuk MSI uninstall di sini (berbagai cara yang berbeda untuk uninstall paket MSI): https://stackoverflow.com/questions/450027/uninstalling-an-msi-file-from-the-command-line-without-using-msiexec/1055933#1055933. Ada sejumlah cara yang berbeda untuk uninstall. Jika anda menulis sebuah batch file, silakan lihat di bagian 3 di atas, terkait jawaban untuk beberapa umum dan standar uninstall varian baris perintah. Dan link cepat ke [msiexec.exe (opsi baris perintah)][15] (tinjauan dari baris perintah untuk msiexec.exe dari MSDN). Dan Technet versi juga.

Mengambil lain MSI Sifat / Informasi (f.ex Kode Upgrade)

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 mencari Orca-x86_en-kita.msi - di bawah Program 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.

Komentar (6)

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
Komentar (0)