0

このテーマについて私が独自に行ったすべての調査では、インストールされた各プログラムには一意の 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ファイルに多くの作業を入れる前に、確実に知る必要があります-時折。

ありがとう!

4

2 に答える 2

2

GUID は、インストールされているアプリケーションのバージョンや言語によって異なります。このバッチ ファイルを使用してアンインストールを試みる前に、まずこれらが同一であることを確認する必要があります。ただし、バッチ ファイルを使用するよりも良い方法があります。

C/C++ を知っている場合は、Windows インストーラー ( http://msdn.microsoft.com/en-us/library/aa372463%28v=vs.85%29.aspx ) の使用に関する MSDN ドキュメント、特にDetermining Installation Contextを検討してください。セクション。

于 2013-02-04T11:05:42.543 に答える
1

製品コードは、アプリケーションまたは製品の主要なIDと見なされるGUIDです。パッケージ名とパッケージコードの一貫性を保つことは「Windowsインストーラのベストプラクティス」です。特定の種類の更新では、製品コードを変更する必要があります。これらについては、MSDNのドキュメント「製品コードの変更」で説明されています。

したがって、製品が複数の製品コードを持つ可能性があります。

製品コードは、ProductCodeプロパティの値です。異なる製品に、他の製品で使用されているものと同じ製品コードGUIDを割り当てないでください。これは非常に悪いことですが、それを防ぐメカニズムはありません。パッケージの作成者は、GUIDGENなどのユーティリティを使用して一意のGUIDを取得する責任があります。(注:GUIDGENなどのユーティリティは小文字を含むGUIDを生成できます。インストーラーがGUIDを有効な製品コードとして使用するには、これらをすべて大文字に変更する必要があります。)

于 2013-02-05T23:32:45.730 に答える