パッチ適用、アンインストール(how-to uninstall)などのメンテナンスを行うため、また監査目的のために、インストールされたMSIファイルのproduct GUID**を見つける必要があるのですが、どうすればいいですか?
アップグレードコード**の取得について。
https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095
ショートバージョン
以下の情報は、時間の経過とともにかなり増えてきており、少し凝りすぎている可能性があります。プロダクトコードを素早く取得する方法(4つのアプローチ)。 1.
Powershell "ワンライナー"
を使用する。スクリーンショットとステップバイステップは下にスクロールしてください。免責事項は以下の通りです。 - あなたが尋ねる人に応じて、マイナーまたは中程度のリスク。私にとってはOKです。このオプションによって引き起こされた自己修復は、一般的にキャンセルすることが可能であるべきです。パッケージの整合性チェックは、イベントログにノイズを加えますが。注意事項!IdentifyingNumber` は
ProductCode
(WMI peculiarity)です。
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
レジストリにあるものを検索することを誓う人もいます。私は、適切なAPI(言い換えれば、OSのファンクションコール)を経由するのが好きなので、この方法はお勧めしません。API実装の内部でのみ説明される奇妙な例外が常に存在するのです。
HKLMOFTWARE
HKLMSOFTWARE}WOW6432Node}MicrosoftWindowsCurrentVersion}Uninstall
HKCUSoftwareMicrosoft</p> <p>WindowsCurrentVersionUninstall
.
4.オリジナルMSIファイル/WiXソース`についてMSI ファイルの Property table
には Product Code
があります (他のプロパティも同様です)。しかし、GUIDはインストール時に適用される変換によって上書きされ、製品が登録されているGUIDと一致しない可能性があります(上記のアプローチ1および2は、そのようなまれなシナリオでWindowsに登録されている実際の製品コードを報告します)。
MSI ファイルを表示するツールが必要です。ダウンロード可能な無料ツールのリストについては、以下の回答の下部を参照してください(または、以下のクイックオプションを参照してください): https://stackoverflow.com/questions/48482545/how-can-i-compare-the-content-of-two-or-more-msi-files/48482546#48482546
最新情報です。便利さとスピードの必要性 :-)のために、この直接ダウンロードのホットリンクから遅延と大騒ぎなしでSuperOrcaをダウンロードしてください - ツールは仕事を得るために十分です - インストール、MSIを開いてプロパティ・テーブルに直接行き、製品コード
行を探してください( 直接ダウンロードするホットリンクを常にウイルスチェック - 当然 - あなたが使用できる virustotal.com)。com]6を使用して行うことができます - アップロードするものをスキャンするために何十ものアンチウイルスおよびマルウェアスイートを利用するオンラインスキャン)。
また、Orcaは、マイクロソフト独自のツールで、Visual Studio**と一緒にインストールされます。
Windows SDKです。Orca-x86_ja-us.msi
** - で検索してみてください。 **Program Files (x86)
** で、MSIが見つかればインストールします。そして、その下に、"有機的に成長"した元の答えがあり、多くの詳細があります。 もし、この作業が必要であれば、以下の "Uninstall MSI Packages" のセクションを参照してください。
プロダクトコードの取得
UPDATE:アップグレードコードも必要な場合は、こちらの回答をご確認ください。 https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095** (関連する製品コード、アップグレードコード、製品名を検索します) 以下のようなテーブルを出力します。)
PowerShellを使用できない場合、以下の「代替ツール」を参照してください。
- アンインストールするには? 以下の「"MSIパッケージのアンインストール」のセクションを参照してください。 PowerShellを起動し(Windowsキーを押しながらRをタップし、Windowsキーを離し、"powershell"と入力しOKを押す)、以下のコマンドを実行すると、インストール済みのMSIパッケージの製品コードとローカルキャッシュパッケージパス*、製品名**(名前が切り捨てられないようPowerShellウィンドウを最大化します)が一覧に表示されます。 このコマンドラインを実行する前に、以下の免責事項をお読みください (危険なことは何もありませんが、いくつかの潜在的な迷惑があります)。セクション3の「代替ツール」では、VBScriptを使用してWMI以外の方法で同じ情報を取得する方法を示しています。パッケージをアンインストールする場合、以下のセクションに msiexec.exe のコマンドラインの例があります。
get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
出力はこのようなものになるはずです。 画像の説明を入力してください]7。 注意!** 不思議なことに、WMIではquot;ProductCode"はquot;IdentifyingNumber"と呼ばれています。つまり、言い換えれば、上の図では、IdentifyingNumberはProductCodeであるということです。 多くのリモート コンピュータに対してこのクエリをリモートで実行する必要がある場合*、以下の "Retrieve Product Codes From A Remote Computer*" セクションを参照してください。
DISCLAIMER (重要です。コマンドを実行する前にお読みください!):マイクロソフトの奇妙な設計により、
Win32_Product
へのWMI呼び出しは、すべて、そのようなものではありません。 (以下のPowerShellコマンドのように)このコマンドを実行すると、検証のトリガーとなります。 パッケージエステート。かなり遅い*ことに加え、まれに以下のようなことが起こります。 MSIの自己修復の引き金となります。これは、小さなパッケージであったり、何か Visual Studioのような巨大なものです。ほとんどの場合、このようなことは起こりませんが リスクはあります。重要なイベントの直前にこのコマンドを実行しないでください。 この方法は決して危険ではありません(読み取り専用です)が、次のような可能性があります。 ごくまれに修復に時間がかかることがあります。 自己修復も同様に、問題のパッケージによって積極的に阻止されない限り、Win32_Productを呼び出すと再開されます。 また、自己修復を終了させるまで、この状態が続きます(終了させても続く場合もあります:https://stackoverflow.com/questions/5501028/how-can-i-determine-what-causes-repeated-windows-installer-self-repair/6066263#6066263)。 ということです。 あと、一応記録しておきます。[また、Win32_Productクラスに対するWMIクエリが原因であることも分かっています(個人的には、このような現象は見たことがありません)。これは、上で提案したPowershellコマンドとは直接関係なく、WIMクラスWin32_Productの一般的な使用という文脈です。 また、(テーブルの代わりに)リスト形式で出力を取得することができます。
get-wmiobject -class Win32_Product
理論的には、コマンド自体の一部として、リモートコンピューター名を指定すればよいはずです。以下は、上記と同じコマンドをマシン "RemoteMachine"で実行するように設定したものです (ComputerName RemoteMachine
セクションが追加されています)。
get-wmiobject Win32_Product -ComputerName RemoteMachine | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize
適切なドメインでドメイン管理者権限で実行している場合、この方法は有効かもしれません。ワークグループ環境(スモールオフィス/ホームネットワーク)では、おそらくWMIコールに直接ユーザー認証情報を追加しないと動作しないでしょう。 さらに、WMIでのリモート接続は、(少なくとも)Windowsファイアウォール、DCOM設定、ユーザーアカウント制御(UAC)(さらにMicrosoft以外の要因、たとえばリアルファイアウォール、サードパーティ製ソフトウェアファイアウォール、**各種セキュリティソフトウェア***などの影響を受ける。)うまくいくかどうかは、あなたの正確な設定によります。
PowerShellは、.NETフレームワークのインストールが必要です(現在バージョン3.5.1らしい?2017年10月)。また、.NETがインストールされていても、実際のPowerShellアプリケーション自体がマシンから欠落していることもあります。最後に、PowerShellは様々なシステムポリシーや権限によって無効化またはロックされる可能性があると私は思います。
このような場合、プロダクトコードを取得する他の方法をいくつか試してみてください。私がお勧めするのはVBScriptで、高速で柔軟性があります(ただし、特定のマシンではロックされることがありますし、スクリプトはツールを使用するよりも常に少し複雑です)。
1.1. Windowsに組み込まれているWMIツールから始めてみましょう。wbemtest.exe
を使用します。
wbemtest.exe
を起動します(Windowsキーを押しながらRキーを押し、Windowsキーを離し、"wbemtest"と入力してOKを押します)。WMIExplorer.exe
のようなカスタムでよりフル機能の WMI ツールを試してみることができます。SELECT IdentifyingNumber,Name,Version FROM Win32_Product
を入力し、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
今のところ、これ以上の商品コード取得の汎用的なオプションは思いつきませんので、ご存知の方は追加をお願いします。あまり多くのコメントを追加するよりも、インラインで編集してください。
アプリケーションからこの情報にアクセスすることは可能です。 MSIオートメーションインターフェイス]1(COMベース)または[C++]を呼び出すことによって。 MSIインストーラ関数]14です。また、上記のサンプルのように、PowerShell
、
wbemtest.exeまたは
WMIExplorer.exe`` を使って、アプリケーションから WMI クエリを使用することもできます。MSIパッケージのアンインストール
プロダクトコードを見つけたMSIパッケージをアンインストールしたい場合は、昇格コマンドプロンプト(cmd.exeを検索し、右クリックして管理者として実行)を使って以下のように行うことができます。 オプション1。ログを取らない基本的な対話式アンインストール (迅速かつ簡単)。
msiexec.exe /x {00000000-0000-0000-0000-00000000000C}
クイックパラメータの説明です。
/X = run uninstall sequence
{00000000-0000-0000-0000-00000000000C} = product code for product to uninstall
また、必要に応じて(冗長)ログを有効にし、サイレントモードで実行することができますので、オプション2へとつながります。 オプション 2:サイレントアンインストールと冗長ロギング (バッチファイルの場合)
msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress
クイックパラメータの説明です。
/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ファイル内のコードを手動で探す代わりに、インストールされたパッケージのアップグレードコードを見つける方法についての新しい回答]17をご覧ください。についてです。 インストール済みのパッケージは、この方がずっと信頼できます。もしパッケージが インストールされている場合でも、MSIファイル(またはソースファイル)を見る必要があります。 MSI のコンパイルに使用された >)から、アップグレードコードを見つけることができます。以下の古いセクションに残しておきます。 アップグレードコードやその他のMSIのプロパティを取得したい場合は、上の画像で"LocalPackage"で指定した場所にある製品のキャッシュインストールMSIを開いてください(みたいなものです。C:\WINDOWSInstaller︵50c080ae.msi` - hex file name, unique on each system).それから、quot;Property table" でUpgradeCodeを探します(UpgradeCodeは変換で再定義されることがあります - 正しい値を得るには、システムからプログラムでコードを取得する必要があります - このためのスクリプトを近日中に提供します。ただし、キャッシュされたMSIで見つかったUpgradeCodeは一般的に正しいです)。 キャッシュされたMSIファイルを開くには、Orca または他のパッケージングツールを使用します。ここでは、様々なツール(どれでも構いません)について説明しています。https://stackoverflow.com/questions/1544292/what-installation-product-to-use-installshield-wix-wise-advanced-installer/1546941#1546941。もし、そのようなツールがインストールされていない場合は、[Super Orca]4 を試してみるのが一番早いかもしれません(使い方は簡単ですが、私が広範囲にテストしているわけではありません)。 UPDATE: MSIファイルを見るために使用できる様々な無料の製品に関する情報を含む新しい回答があります: https://stackoverflow.com/questions/48482545/how-can-i-compare-the-content-of-two-or-more-msi-files/48482546#48482546 Visual Studioがインストールされている場合、Program Files (x86)` の下にある
Orca-x86_en-us.msi
を検索してインストールしてください(これはMicrosoft独自の公式MSIビューアおよびエディタです)。そして、スタートメニューからOrcaを見つけてください。すぐに使えるようになります:-)。技術的には、OrcaはWindows SDK(Visual Studioではない)の一部としてインストールされますが、Windows SDKはVisual Studioのインストール時にバンドルされています。もしあなたがVisual Studioをインストールしていないなら、もしかしたらインストールしている人を知っているかもしれませんね?このMSIを検索してもらい、送信してもらえばよいのです(0.5MBの小さなファイルです)。UPDATE**:MSIと同様にいくつかのCABファイルが必要です。MSIがない場合は、Windows SDKをダウンロードしてください(無料ですが、サイズが大きく、インストールするとPCの速度が低下します)。SDKのどの部分がOrca MSIをインストールするのか、私にはわかりません。もしそうなら、ここに編集して詳細を追加してください。
類似のトピック(参照と簡単なアクセスのために - 私はこのリストをクリーンアップする必要があります)。
インストーラの数が多すぎて、探しているものが簡単に見つからない場合、フィルターを提供して表示名で少し絞り込むためのpowershellを紹介します。
$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