このテーマについて私が独自に行ったすべての調査では、インストールされた各プログラムには一意の GUID が割り当てられていると主張しているようです。それを念頭に置いて、msiexec を使用してプログラムのセット リストをサイレント モードでアンインストールする、非常に単純な .bat ファイルの設計に着手しました。
MSI インベントリ (HKLM のレジストリから GUID を取得するのと似ています) を使用して、アンインストールする各プログラムのすべての製品コードを収集しました。
例:
Product code: {89C254A9-2FB5-4FC9-B34F-BDEB2713C5FA}
Product state: (5) Installed.
Package code: {BD709EB5-2B9C-4664-A654-C9AB18B25DBE}
Version: 2.10.28
上記の例から製品コードを取得し、バッチを次のように非常に簡単に記述しました。
msiexec /x {89C254A9-2FB5-4FC9-B34F-BDEB2713C5FA} /passive
私が理解しているように、この ID: {89C254A9-2FB5-4FC9-B34F-BDEB2713C5FA} は、アンインストールしようとしているこのプログラムに固有である必要があります。したがって、同じプログラムがインストールされている別のコンピューターからこのバッチを実行すると、ユーザーが必要とする入力なしで、それが検出され、受動的にアンインストールされます。
ただし、結果はまちまちです。アンインストールするコンピューターもあれば、プログラムが見つからないように見えるコンピューターもあります。プログラムのアンインストールに失敗したコンピューターの MSI インベントリには、異なる製品コードが表示されます。
これらの製品コードは、プログラムの作成時に作成され、インストーラーに埋め込まれた本当に一意の GUID ですか? プログラムをインストールするすべてのマシンで同じにする必要がありますか?
答えが「はい」の場合、プログラムコードが時間の経過とともに変更された「異なるバージョン」の問題に対処しているに違いありません...しかし、動作するだけの.batファイルに多くの作業を入れる前に、確実に知る必要があります-時折。
ありがとう!