Yama**, **
kaldırma** ([**nasıl kaldırılır**][1]) gibi bakım işlemlerini gerçekleştirmek ve ayrıca **
denetim amacıyla yüklü bir MSI dosyası için ürün GUID`sini** bulmam gerekiyor.
yükseltme kodu alımı için: https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095
Kısa Versiyon
Aşağıdaki bilgiler zaman içinde önemli ölçüde artmıştır ve biraz fazla ayrıntılı hale gelmiş olabilir. **Ürün kodları nasıl hızlı bir şekilde elde edilir?
Powershell "one-liner"`ı kullanın
Ekran görüntüsü ve adım adım ilerlemek için aşağı kaydırın. Feragatname de aşağıda - kime sorduğunuza bağlı olarak küçük veya orta riskler. Benim için iyi çalışıyor. Bu seçenek tarafından tetiklenen herhangi bir kendi kendini onarma genellikle iptal edilebilmelidir. Yine de tetiklenen paket bütünlüğü kontrolleri bazı olay günlüğü "gürültü" ekliyor. Not! IdentifyingNumber
**is** the
ProductCode` (WMI özelliği).
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
VBScript Kullan
Bazıları kayıt defterinde bir şeyler aramaya yemin ediyor. Benim önerdiğim yaklaşım bu değil - ben uygun API'leri (ya da başka bir deyişle işletim sistemi işlev çağrılarını) kullanmayı seviyorum. Her zaman sadece API uygulamasının iç kısımları tarafından açıklanan garip istisnalar vardır:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall
Orijinal MSI Dosyası / WiX Kaynağı
Herhangi bir MSI dosyasının Özellik tablosu
içinde Ürün Kodu
nu bulabilirsiniz (ve başka herhangi bir özelliği de). Ancak, GUID muhtemelen (nadiren) yükleme sırasında uygulanan bir dönüşüm tarafından geçersiz kılınabilir ve bu nedenle ürünün kayıtlı olduğu GUID ile eşleşmeyebilir (yukarıdaki 1. ve 2. yaklaşım, bu tür nadir senaryolarda Windows'ta kayıtlı olan gerçek ürün kodunu bildirecektir).
MSI dosyalarını görüntülemek için bir araca ihtiyacınız vardır. İndirebileceğiniz ücretsiz araçların bir listesi için aşağıdaki yanıtın en altına bakın (veya aşağıdaki hızlı seçeneğe bakın): https://stackoverflow.com/questions/48482545/how-can-i-compare-the-content-of-two-or-more-msi-files/48482546#48482546
GÜNCELLEME: Kolaylık ve hız ihtiyacı için :-), SuperOrca'yı bu doğrudan indirme bağlantısından gecikmeden ve telaşlanmadan indirin - araç işi halletmek için yeterince iyidir - kurun, MSI'ı açın ve doğrudan Özellik tablosu'e gidin ve `ProductCode' satırını bulun (lütfen her zaman doğrudan indirilen bir bağlantıyı virüs kontrol edin - tabii ki - [virustotal]'ı kullanabilirsiniz.com]6 adresini kullanabilirsiniz - yüklediklerinizi taramak için düzinelerce anti-virüs ve kötü amaçlı yazılım paketini kullanan çevrimiçi tarama).
Orca Microsoft'un kendi aracıdır, Visual Studio ile birlikte yüklenir ve Windows SDK. altında
Orca-x86_en-us.msi
dosyasını aramayı deneyin.Program Files (x86)
ve bulunursa MSI'yı yükleyin.Ve aşağıda, "organik olarak büyüyen " orijinal cevabı bulacaksınız; çok fazla ayrıntıya. Yapmanız gereken görev buysa aşağıdaki "MSI Paketlerini Kaldır" bölümüne bakabilirsiniz.
Ürün Kodlarını Al
GÜNCELLEME: Ayrıca yükseltme koduna ihtiyacınız varsa, bu yanıtı kontrol edin: https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095 (ilişkili ürün kodlarını, yükseltme kodlarını & ürün adlarını bir tablo çıktısı - aşağıdakine benzer).
- PowerShell kullanamıyor musunuz? Aşağıdaki "Alternatif Araçlar" bölümüne bakın.
- Kaldırmak mı istiyorsunuz? Aşağıdaki "MSI paketlerini kaldır" bölümüne bakın. PowerShell'i çalıştırın (Windows tuşunu basılı tutun, R'ye dokunun, Windows tuşunu bırakın, "powershell" yazın ve Tamam'a basın) ve yüklü MSI paketlerinin listesini almak için aşağıdaki komutu çalıştırın ürün kodları ile birlikte yerel önbellek paketi yolu ve ürün adı** (isimlerin kesilmesini önlemek için PowerShell penceresini büyütün). Bu komut satırını çalıştırmadan önce, lütfen aşağıdaki feragatnameyi okuyun (tehlikeli bir şey yok, sadece bazı potansiyel sıkıntılar). Bölüm 3'te "Alternatif Araçlar" başlığı altında VBScript kullanarak aynı bilgileri almanın WMI dışı alternatif bir yolu gösterilmektedir. Eğer bir paketi kaldırmaya çalışıyorsanız, aşağıda bazı örnek msiexec.exe komut satırlarını içeren bir bölüm bulunmaktadır:
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
Çıktı** buna benzer olmalıdır: *Not: Bazı garip nedenlerden dolayı "ProductCode" WMI'da "IdentifyingNumber" olarak adlandırılır. Yani başka bir deyişle - yukarıdaki resimde IdentifyingNumber ÜrünKodudur. Bu sorguyu çok sayıda uzak bilgisayara karşı uzaktan çalıştırmanız* gerekiyorsa, aşağıdaki "Uzak Bir Bilgisayardan Ürün Kodlarını Almak*" bölümüne bakın.
DİSCLAIMER (önemli, lütfen komutu çalıştırmadan önce okuyun!): Garip Microsoft tasarımı nedeniyle,
Win32_Product
komutuna yapılan herhangi bir WMI çağrısı (aşağıdaki PowerShell komutu gibi) bir doğrulama işlemini tetikleyecektir. paket emlak. Oldukça yavaş* olmasının yanı sıra, bu nadir durumlarda bir MSI kendi kendini onarmasını tetikler. Bu küçük bir paket veya başka bir şey olabilir büyük - Visual Studio gibi. Çoğu durumda bu gerçekleşmez - ancak bir risk var. Bu komutu önemli bir işlemden hemen önce çalıştırmayın toplantı - hiçbir zaman tehlikeli değildir (salt okunurdur), ancak çok nadir durumlarda uzun bir onarıma yol açar* (Sanırım kendi kendini onarır - söz konusu paket tarafından aktif olarak engellenmediği sürece, ancak Win32_Product'u çağırırsanız yeniden başlayacaktır tekrar ve bu, kendi kendini onarmanın bitmesine izin verene kadar devam edecektir - bazen bitmesine izin verseniz bile devam edebilir: https://stackoverflow.com/questions/5501028/how-can-i-determine-what-causes-repeated-windows-installer-self-repair/6066263#6066263).Ve sadece kayıt için: Bazı kişiler olay günlüklerinin MsiInstaller EventID 1035 girdileri ile dolduğunu bildiriyor (kod şefinin yanıtına bakın) - görünüşe göre Win32_Product sınıfına yapılan WMI sorgularından kaynaklanıyor (şahsen ben bunu hiç görmedim). Bu, yukarıda önerilen Powershell komutuyla doğrudan ilgili değildir, Win32_Product WIM sınıfının genel kullanımı bağlamındadır. Çıktıyı liste biçiminde de alabilirsiniz (tablo yerine):
get-wmiobject -class Win32_Product
Teorik olarak, komutun kendisinin bir parçası olarak uzak bilgisayar adını belirtebilmeniz gerekir. İşte yukarıdaki komutun aynısı "RemoteMachine" (-ComputerName RemoteMachine
bölümü eklendi) makinesinde çalışacak şekilde ayarlandı:
get-wmiobject Win32_Product -ComputerName RemoteMachine | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
Uygun bir etki alanında etki alanı yöneticisi haklarıyla çalışıyorsanız bu işe yarayabilir. Bir çalışma grubu ortamında (küçük ofis / ev ağı), çalışmasını sağlamak için muhtemelen kullanıcı kimlik bilgilerini doğrudan WMI çağrılarına eklemeniz gerekir. Ek olarak, WMI'daki uzak bağlantılar (en azından) Windows Güvenlik Duvarı, DCOM ayarları ve Kullanıcı Hesabı Denetimi (UAC) (artı Microsoft dışı ek faktörler - örneğin gerçek güvenlik duvarları, üçüncü taraf yazılım güvenlik duvarları, çeşitli türlerde güvenlik yazılımları, vb...) tarafından etkilenir. Çalışıp çalışmayacağı tam kurulumunuza bağlıdır.
PowerShell, .NET çerçevesinin yüklenmesini gerektirir (şu anda 3.5.1 sürümünde görünüyor? Ekim, 2017). .NET yüklü olsa bile gerçek PowerShell uygulamasının kendisi de makinede eksik olabilir. Son olarak, PowerShell'in çeşitli sistem ilkeleri ve ayrıcalıkları tarafından devre dışı bırakılabileceğine veya kilitlenebileceğine inanıyorum. Durum buysa, ürün kodlarını almak için birkaç başka yol deneyebilirsiniz. Benim tercih ettiğim alternatif VBScript - hızlı ve esnektir (ancak belirli makinelerde kilitlenebilir ve komut dosyası yazmak her zaman araç kullanmaktan biraz daha karmaşıktır).
wbemtest.exe
.yi başlatın (*Windows tuşunu basılı tutun, R tuşuna dokunun, Windows tuşunu bırakın, "wbemtest.exe" yazın ve Tamam
a basın*).SELECT IdentifyingNumber,Name,Version FROM Win32_Product
ve "Use" (veya eşdeğeri - araç yerelleştirilecektir) seçeneğine tıklayın.WMIExplorer.exe
gibi özel, daha tam özellikli bir WMI aracını deneyebilirsinizSELECT IdentifyingNumber,Name,Version FROM Win32_Product
ve Çalıştır'a basın.msiinfo.csv
olarak adlandırılır.' 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 biliyorsanız ekleyin. Çok fazla yorum eklemek yerine Sadece satır içi düzenleyin lütfen.
Bu bilgilere kesinlikle uygulamanızın içinden erişebilirsiniz MSI otomasyon arayüzü (COM tabanlı) VEYA C++ MSI yükleyici işlevleri (Win32 API). Ya da
PowerShell
,wbemtest.exe
veyaWMIExplorer.exe
kullanarak yukarıdaki örneklerde yaptığınız gibi uygulamanızın içinden WMI sorgularını kullanın.MSI Paketlerini Kaldırma
Yapmak istediğiniz şey ürün kodunu bulduğunuz MSI paketini kaldırmaksa, bunu bir yükseltilmiş komut istemi kullanarak aşağıdaki şekilde yapabilirsiniz (cmd.exe dosyasını arayın, sağ tıklayın ve yönetici olarak çalıştırın): Seçenek 1: **Günlük kaydı olmadan temel, etkileşimli 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 isterseniz (verbose) günlük kaydını etkinleştirebilir ve sessiz modda çalıştırabilirsiniz, bu da bizi 2. seçeneğe götürür: Seçenek 2: Verbose günlük kaydı ile sessiz kaldırma (toplu iş 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
UPDATE: MSI dosyalarında kodu elle aramak yerine lütfen yüklü paketler için yükseltme kodunun nasıl bulunacağına ilişkin yeni bir yanıt bulun. İçin yüklü paketler bu çok daha güvenilirdir. Eğer paket yüklüyse, yine de MSI dosyasına (veya kaynak dosyaya) bakmanız gerekir yükseltme kodunu bulmak için MSI'ı derlemek için kullanılır). Aşağıdaki eski bölümde bırakılıyor: Eğer UpgradeCode veya diğer MSI özelliklerini almak istiyorsanız, yukarıda gösterilen resimde "LocalPackage" ile belirtilen konumdan ürün için önbelleğe alınmış kurulum MSI'ını açabilirsiniz (şöyle bir şey:
C:\WINDOWS\Installer\50c080ae.msi
- her sistemde benzersiz olan bir hex dosya adıdır). Ardından UpgradeCode için "Property table" içine bakarsınız (UpgradeCode'un bir dönüşümde yeniden tanımlanması mümkündür - doğru değeri aldığınızdan emin olmak için kodu sistemden programatik olarak almanız gerekir - bunun için kısa süre içinde bir komut dosyası sağlayacağım. Ancak, önbelleğe alınan MSI'da bulunan UpgradeCode genellikle doğrudur). Önbelleğe alınmış MSI dosyalarını açmak için Orca veya başka bir paketleme aracı kullanın. Burada farklı araçlarla ilgili bir tartışma bulunmaktadır (herhangi biri işinizi görecektir): https://stackoverflow.com/questions/1544292/what-installation-product-to-use-installshield-wix-wise-advanced-installer/1546941#1546941. Eğer böyle bir araç yüklü değilse, en hızlı seçeneğiniz Super Orca'ü denemek olabilir (kullanımı basittir, ancak benim tarafımdan kapsamlı bir şekilde test edilmemiştir). UPDATE: MSI dosyalarını görüntülemek için kullanabileceğiniz çeşitli ücretsiz ürünler hakkında bilgi içeren yeni bir yanıt: https://stackoverflow.com/questions/48482545/how-can-i-compare-the-content-of-two-or-more-msi-files/48482546#48482546 Visual Studio yüklüyse,Program Files (x86)
altındaOrca-x86_en-us.msi
dosyasını aramayı deneyin ve yükleyin (bu Microsoft'un kendi resmi MSI görüntüleyicisi ve düzenleyicisidir). Ardından başlat menüsünde Orca'yı bulun. Zaman kaybetmeyin :-). Teknik olarak Orca, Windows SDK'nın (Visual Studio'nun değil) bir parçası olarak yüklenir, ancak Windows SDK, Visual Studio yüklemesiyle birlikte gelir. Eğer Visual Studio yüklü değilse, belki de yüklü olan birini tanıyorsunuzdur? Sadece bu MSI'ı aramalarını ve size göndermelerini isteyin (yarım mb'lık küçük bir dosya) - saniyeler sürer. GÜNCELLEME: MSI'ın yanı sıra birkaç CAB dosyasına da ihtiyacınız var - bunlar MSI'ın bulunduğu klasörde bulunur. Eğer yoksa, her zaman Windows SDK indirebilirsiniz (ücretsizdir, ancak büyüktür - ve yüklediğiniz her şey bilgisayarınızı yavaşlatacaktır). SDK'nın hangi bölümünün Orca MSI'ı yüklediğinden emin değilim. Eğer biliyorsanız, lütfen düzenleyin ve ayrıntıları buraya ekleyin.
Benzer konular (referans ve kolay erişim için - bu listeyi temizlemeliyim):
Aradığınızı kolayca bulamayacağınız kadar çok yükleyiciniz varsa, burada bir filtre sağlamak ve görünen ada göre biraz daraltmak için bazı powershell'ler var.
$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