Yüklü bir MSI kurulumunun ürün GUID'İNİ nasıl bulabilirim?

bir yüklü MSI dosyası' 151920920 için ürün GUID bulmanız gerekir yama gibi bakım gerçekleştirmek için, kaldırma ve ayrıca denetim amaçlı.

42
tarihinde sordu Stein Åsmul 2015-04-29 10:54:30
kaynak

1 ответов

Kısa Versiyon

aşağıdaki bilgiler zamanla önemli ölçüde büyüdü ve biraz çok ayrıntılı hale gelmiş olabilir. ürün kodlarını hızlı bir şekilde nasıl alabilirim? (dört yaklaşım):

1. Powershell "one-liner"

kullanın

ekran görüntüsü ve adım adım için aşağı kaydırın . Yasal Uyarı ayrıca aşağıda-sormak kim bağlı olarak küçük veya orta riskler. Benim için iyi çalışıyor. Herhangi self-repair bu seçenek tarafından tetiklenen genellikle iptal etmek mümkün olmalıdır. paket bütünlüğü kontrolleri tetiklenmiş olsa da bazı olay günlüğü "gürültü" ekliyor. not ! IdentifyingNumber ProductCode (WMI özelliği) ' dir.

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

Powershell Hızlı başlangıç: Windows anahtar tutun, R dokunun , yazın "powershell" ve basın Enter

2. VBScript

Kullanın

altında aşağıda açıklanan " alternatif Araçlar" (Bölüm 3) . Bu seçenek, aşağıda ayrıntılı olarak açıklanan nedenlerden dolayı Powershell'den veya olabilir. Özünde (çok) daha hızlı ve MSI kendini onarmayı tetikleyemiyor çünkü WMI'DAN geçmiyor (erişiyor MSI COM API doğrudan - kabarma hızında). Bununla birlikte, Powershell seçeneğinden (birkaç kod satırı) daha fazla ilgilidir.

3. Kayıt Defteri Araması

kayıt defterinde şeyler bakarak bazı yemin ederim. Önerilen yaklaşımım değil-uygun API'leri (veya başka bir deyişle: OS işlev çağrıları) geçmeyi seviyorum. Her zaman garip istisnalar sadece iç tarafından muhasebeleştirilir vardır API-uygulama:

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall

4. Orijinal MSI dosyası / Wıx kaynağı

Product Code Property table herhangi bir MSI dosyasının (ve diğer mülklerin de). Bununla birlikte, GUİD, (nadiren) bir tarafından geçersiz kılınabilir yükleme zamanında uygulanan dönüşümü ve dolayısıyla ürünün altında kayıtlı GUID eşleşmiyor (yaklaşım 1 ve 2 yukarıda gerçek Ürün Kodu rapor edecek - Windows ile kayıtlı olan-bu tür nadir senaryolarda).

MSI dosyalarını görüntülemek için bir araca ihtiyacınız var . İndirebileceğiniz ücretsiz araçların bir listesi için aşağıdaki cevabın altına bakın (veya aşağıdaki hızlı seçeneğe bakın): iki (veya daha fazla) MSI dosyasının içeriğini nasıl karşılaştırabilirim?

güncelleme : kolaylık ve need for speed : -), indir superlink gecikme ve yaygara olmadan bu doğrudan-download hotlink - aracı işi halletmek için yeterince iyi - yüklemek, açık MSI ve düz gitmek özellik tablosu ve ProductCode satırını bulun ( lütfen her zaman bir kontrol edin doğrudan-indir hotlink - - kullanabilirsiniz virustotal.com bunu yapmak için-çevrimiçi tarama (ne yüklemek taramak için anti-virüs ve kötü amaçlı yazılım paketleri onlarca kullanarak).


ve aşağıda "organik olarak büyümüş" orijinal cevabı çok ayrıntıya bulacaksınız.

Maybe see " Uninstall MSI Packages " bu yapmanız gereken görev ise aşağıdaki bölüm gerçekleştirmek.


Ürün Kodlarını Al

UPDATE : ayrıca yükseltme kodu gerekiyorsa, bu cevabı kontrol edin: yüklü bir MSI dosyası için yükseltme kodunu nasıl bulabilirim? (ilişkili ürün kodlarını, yükseltme kodlarını ve ürün adlarını alır bir tablo çıkışı-aşağıdaki gibi).

  • PowerShell kullanamazsınız? aşağıdaki "alternatif Araçlar" bölümüne bakın.
  • kaldırmak mı arıyorsunuz? aşağıdaki "MSI paketlerini Kaldır" bölümüne bakın.

Fire up Powershell ( Windows tuşunu basılı tutun, R'ye dokunun, Windows tuşunu bırakın, "powershell" yazın ve tuşuna basın) ve çalıştır yüklü MSI paketinin bir listesini almak için aşağıdaki komut ürün kodları ile birlikte yerel önbellek paket yolu ve Ürün Adı (kesilmiş isimleri önlemek için PowerShell penceresini maksimize).

bu komut satırını çalıştırmadan önce lütfen aşağıdaki feragatnameyi okuyun (tehlikeli bir şey değil, sadece bazı potansiyel nuisances). "Alternatif Araçlar" altındaki Bölüm 3, WMI olmayan alternatif bir yol gösterir VBScript kullanarak aynı bilgiler. Bir paketi kaldırmaya çalışıyorsanız, bazı örnek msıexec ile aşağıda bir bölüm vardır.exe komut satırları:

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

çıkış buna benzer olmalıdır:

enter image description here

not! bazı garip nedenlerle "ProductCode " olarak adlandırılır " İdentifyingNumber " WMI. Yani başka bir deyişle - İdentifyingNumber yukarıdaki resimde ProductCode olduğunu.

uzak bilgisayar sürü karşı uzaktan bu sorguyu çalıştırmak gerekiyorsa, bkz " uzak bir bilgisayardan Ürün kodlarını almak" aşağıdaki bölüm.

' (önemli, lütfen komutu çalıştırmadan önce okuyun!): Garip Microsoft tasarımı nedeniyle, Win32_Product için herhangi bir WMI çağrısı (aşağıdaki PowerShell komutu gibi) doğrulama tetikleyecek paket içeriği . oldukça yavaş olmanın yanı sıra, bu nadir durumlarda olabilir bir MSI kendini tamir tetikler. Bu küçük bir paket ya da bir şey olabilir büyük gibi Visual Studio. Çoğu durumda bu olmaz-ama bir risk var. bu komutu doğru çalıştırmayın önce önemli toplantı-hiç Tehlikeli değil (salt okunur), ancak olabilir çok nadir durumlarda uzun bir onarım kurşun (ben iptal edebilirsiniz düşünüyorum self-repair de-söz konusu paket tarafından aktif olarak engellenmedikçe, ancak win32_product çağırırsanız yeniden başlayacaktır yine ve bu, kendi kendini onarmaya izin verene kadar devam edecektir-bazen bitirmesine izin verseniz bile devam edebilir: Windows Yükleyicisinin nedenlerini nasıl belirleyebilirim kendini tamir mi? ).

ve sadece kayıt için: bazı insanlar olay günlüklerini Msiınstaller EventİD 1035 girişleriyle dolduruyor (kod şefinin cevabına bakın) - görünüşe göre Win32_Product sınıfına WMI sorgularının neden olduğu (şahsen bunu hiç görmedim). Bu değil doğrudan yukarıda önerilen Powershell komutu ile ilgili, bu WIM sınıfı Win32_Product genel kullanım bağlamında olduğunu.

çıktıyı liste biçiminde de alabilirsiniz (tablo yerine):

get-wmiobject -class Win32_Product

bu durumda çıkış buna benzer:

enter image description here


Ürün Kodlarını Uzak Bir Bilgisayardan Al

teoride, komutun kendisinin bir parçası olarak uzak bir bilgisayar adı belirtebilirsiniz. İşte yukarıdaki gibi aynı komut "RemoteMachine" ( -ComputerName RemoteMachine bölümü eklendi) makinede çalıştırmak için kurmak:

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

uygun bir etki alanında etki alanı yönetici hakları ile çalıştırıyorsanız, bu işe yarayabilir. Bir çalışma grubu ortamında (küçük ofis / ev ağı), muhtemelen çalışması için WMI çağrılarına doğrudan kullanıcı kimlik bilgilerini eklemeniz gerekir.

ayrıca, WMI uzaktan bağlantıları Windows Güvenlik Duvarı (en azından) etkilenir , DCOM ayarları ve Kullanıcı Hesabı Kontrolü (UAC) (artı herhangi bir ek olmayan Microsoft)-örneğin gerçek güvenlik duvarları , üçüncü taraf yazılım güvenlik duvarları , çeşitli güvenlik yazılımı , vb...). İşe yarayıp yaramayacağına tam kurulumunuza bağlı.

UPDATE : uzak WMI çalıştıran kapsamlı bir bölüm bu cevapta bulunabilir: yüklü bir MSI dosyası için yükseltme kodunu nasıl bulabilirim? . Bir güvenlik duvarı kuralı görünür ve bir kayıt defteri tweak aracılığıyla UAC isteminin bastırılması, bir çalışma grubu ağında işler yapabilir çevre. Tavsiye edilmez değişiklikler güvenlik-bilge, ama benim için çalıştı.


Alternatif Araçlar

PowerShell gerektirir . NET framework yüklenecek (şu anda 3.5.1 sürümünde görünüyor? Ekim, 2017). Gerçek PowerShell uygulamasının kendisi ,. net yüklü olsa bile makineden de eksik olabilir. Sonunda inanıyorum PowerShell çeşitli sistem politikaları ve ayrıcalıkları tarafından devre dışı veya kilitli olabilir.

durum buysa, ürün kodlarını almak için birkaç başka yol deneyebilirsiniz. Benim tercih edilen alternatif VBScript - hızlı ve esnektir (ancak bazı makinelerde de kilitlenebilir ve komut dosyası her zaman araç kullanmaktan biraz daha fazla ilgilidir).

  1. ile başlayalım dahili Windows WMI aracı : wbemtest.exe .

    • Başlat wbemtest.exe ( Windows tuşunu basılı tutun, R'ye dokunun, Windows anahtarını bırakın, "wbemtest" yazın.exe "ve basın Tamam ).
    • Bağlan ve Tamam (ad alanı varsayılan root\cımv2) ve' Bağlan " tekrar tıklayın.
    • tıklayın " sorgu "ve bu yazın wql komutu (SQL Server): SELECT IdentifyingNumber,Name,Version FROM Win32_Product ve tıklayın " kullanım "(veya eşdeğer - araç lokalize olacak).
    • örnek çıkış ekran görüntüsü (kesilmiş). En güzel biçimlendirme değil, ancak ihtiyacınız olan verileri alabilirsiniz. IdentifyingNumber MSI Ürün Kodu :

wbemtest.exe

  1. sonra, böyle WMIExplorer.exe

    gibi özel, daha tam özellikli WMI aracı deneyebilirsiniz
    • bu Windows dahil değildir. Bununla birlikte, çok iyi bir araçtır. Tavsiye.
    • şuna bak: https://github.com/vinaypamnani/wmie2/releases
    • aracı başlatın, Connect'i tıklayın, ROOT\CIMV2
    • yi çift tıklayın
    • dan " sorgu sekmesi ", aşağıdaki sorgu SELECT IdentifyingNumber,Name,Version FROM Win32_Product yazın ve Execute tuşuna basın.
    • ekran atlandı, uygulama çok fazla ekran gayrimenkul gerektirir.
  2. nihayet VBScript üzerinden bilgi erişmek için MSI otomasyon arabirimi (Windows Çekirdek Özelliği - . WMI için ).

    • aşağıdaki komut dosyasını kopyalayın ve bir *dosyasına yapıştırın.vbs masaüstünüzde dosya ve çift tıklatarak çalıştırmayı deneyin. Masaüstünüz sizin için yazılabilir olmalıdır, ya da başka yazılabilir konumunu kullanabilirsiniz.
    • bu harika bir VBScript değil. Terseness, hata işleme ve eksiksizlik üzerine tercih edilmiştir, ancak işi minimum karmaşıklıkla yapmalıdır.
    • çıkış dosya, komut dosyasını çalıştırdığınız klasörde oluşturulur ( klasörü yazılabilir olmalıdır). Çıkış dosyası msiinfo.csv olarak adlandırılır .
    • bir elektronik tablo uygulamasında açmak için dosyayı çift tıklatın, virgülü içe aktarma - veya - sadece dosyayı Not Defteri'nde veya herhangi bir metin görüntüleyicide açın.
    • bir elektronik tabloda açılması gelişmiş sıralama özellikleri sağlayacaktır.
    • bu komut dosyası kolayca göstermek için adapte edilebilir MSI kurulumu ile ilgili önemli miktarda ayrıntı. Bunun bir gösterimi burada bulunabilir: hangi ürünlerin yüklü olduğunu nasıl öğrenebilirim - yeni ürün zaten MSI Windows yüklendi .
' 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

şu anda ürün kodlarını almak için başka genel amaçlı seçenekler düşünemiyorum, lütfen herhangi birini biliyorsanız ekleyin. sadece çok fazla yorum eklemek yerine satır içi düzenleyin.

kesinlikle uygulama içinde bu bilgilere erişebilirsiniz MSI otomasyon arabirimi (com tabanlı) veya C++çağırarak MSI yükleyici fonksiyonları (Win32 API). Veya PowerShell , wbemtest.exe veya WMIExplorer.exe kullanarak yukarıdaki örneklerde yaptığınız gibi uygulamanızın içinden WMI sorguları kullanın.


'MSI paketleri

ne yapmak istiyorsanız MSI paketini kaldırın ürün kodunu buldunuz, bunu yükseltilmiş komut istemi ( cmd arayın.exe , sağ tıklayın ve yönetici olarak çalıştır ):

seçenek 1 : günlüğü olmadan temel, interaktif kaldırma (hızlı ve kolay):

msiexec.exe /x {00000000-0000-0000-0000-00000000000C}

Hızlı Parametre Açıklaması:

/X = run uninstall sequence
{00000000-0000-0000-0000-00000000000C} = product code for product to uninstall

ayrıca (ayrıntılı) günlüğü etkinleştirmek ve isterseniz sessiz modda çalıştırabilirsiniz, seçenek 2 bizi lider:

opsiyon 2 : ayrıntılı günlüğü ile sessiz kaldırma (toplu dosyalar için daha iyi):

msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress

Hızlı Parametre Açıklaması:

/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

MSI uninstall için kapsamlı bir referans var burada (MSI paketlerini kaldırmanın çeşitli farklı yolları): msıexec kullanmadan komut satırından bir MSI dosyasını kaldırma . Kaldırmak için farklı yollar bir bolluk vardır.

eğer bir toplu iş dosyası yazıyorsunuz, lütfen yukarıdaki Bölüm 3'e bir göz atın, birkaç ortak ve standart kaldırma komut satırı varyantları için bağlantılı cevap.

ve msıexec hızlı bir bağlantı.exe (komut satırı seçenekleri) (msıexec için komut satırına genel bakış.MSDN exe). Ve Technet sürümü de.


diğer MSI özellikleri / bilgileri (f.EX yükseltme kodu)

güncelleme : yüklü paketler için yükseltme kodunu bulmak için nasıl yeni bir cevap yerine manuel MSI dosyalarında kod ararken. İçinde yüklü paketler bu çok daha güvenilir. Paket değilse yüklü, hala MSI dosyasına (veya kaynağa) bakmanız gerekir Dosya yükseltme kodunu bulmak için MSI derlemek için kullanılır. Aşağıda eski bölümde bırakarak:

UpgradeCode veya diğer MSI özellikleri almak istiyorsanız, " LocalPackage " tarafından belirtilen konumdan Ürün için önbelleğe alınmış yükleme MSI açabilirsiniz yukarıdaki resimde ( C:\WINDOWS\Installerc080ae.msi gibi bir şey - her sistemde benzersiz bir onaltılık dosya adıdır). O zaman sen UpgradeCode için " özellik tablosu " ye bakın (Upgradecode'un bir transform'da yeniden tanımlanması mümkündür-sistemden programlı olarak kod almanız gereken doğru değeri elde ettiğinizden emin olmak için-bunun için kısa bir süre bir komut dosyası sağlayacağım. Ancak, önbelleğe alınmış MSI'DE bulunan UpgradeCode genellikle doğrudur ).

önbelleğe alınmış MSI dosyalarını açmak için Orca kullanın veya başka bir paketleme aracı. İşte farklı araçların bir tartışma (bunlardan herhangi yapacak): ne kurulum ürünü kullanmak için? InstallShield, WiX, Wise, Advanced Installer, etc . Böyle bir aracınız yüklü değilse, en hızlı bahisiniz Super Orca denemek olabilir (kullanımı kolaydır, ancak benim tarafından kapsamlı bir şekilde test edilmemiştir).

güncelleme : işte hakkında bilgi içeren yeni bir cevap MSI dosyalarını görüntülemek için kullanabileceğiniz çeşitli ücretsiz ürünler: iki (veya daha fazla) MSI dosyasının içeriğini nasıl karşılaştırabilirim?

Visual Studio'yu yüklediyseniz, Orca-x86_en-us.msi - Program Files (x86) altında aramayı deneyin ve yükleyin (bu Microsoft'un kendi resmi MSI görüntüleyici ve editörüdür). Ardından orca'yı Başlat menüsünde bulun. Hiçbir zaman zaman git :-). Teknik olarak Orca, Windows SDK'nın bir parçası olarak yüklenir (Visual Studio değil), ancak, Windows SDK Visual Studio install ile birlikte verilir. Visual Studio yüklü değilse, belki de birisi kim biliyor musun? Sadece onları bu MSI için arama ve (bu küçük bir yarım mb dosyadır) göndermek var - onlara saniye almalıdır. UPDATE : birkaç CAB dosyalarının yanı sıra MSİ'YE ihtiyacınız var - bunlar, MSİ'NİN bulunduğu aynı klasörde bulunur. Değilse, her zaman Windows SDK (o ücretsiz, ancak büyük - ve yüklediğiniz her şey PC'nizi yavaşlatacaktır). SDK'nın hangi bölümünün Orca MSİ'Yİ yüklediğinden emin değilim. Bunu yaparsanız, sadece düzenlemek ve burada ayrıntıları ekleyin.



benzer konular (referans ve kolay erişim için-bu listeyi temizlemeliyim):

81
cevap Stein Åsmul 2018-08-16 19:22:59
kaynak