Windows MSIファイルから利用可能なパブリックプロパティを取得するためのツールまたはメカニズムはありますか?
MSIファイルを提供するベンダーの中には、これらを自分で文書化していないものがあります。そのため、ソースコードなしでこれらを公開する方法があるかどうかを知りたいです。
Windows MSIファイルから利用可能なパブリックプロパティを取得するためのツールまたはメカニズムはありますか?
MSIファイルを提供するベンダーの中には、これらを自分で文書化していないものがあります。そのため、ソースコードなしでこれらを公開する方法があるかどうかを知りたいです。
回答:
MSIファイルはパブリックプロパティを内部データベースに格納するため、VBScriptとSQLを使用して実際にクエリを実行できます。
MSIファイルに保存されているすべてのプロパティを返すスクリプトの例を次に示します。大文字を使用してパブリックプロパティを定義するのが慣例であるため、通常はそれらを識別することができます。
lessmsiは、GUIを開いて手動で調査する場合に、ここで確実に機能する優れたツールです。ただし、次のコマンドはすべてのプロパティを確実に表示するわけではない、と言います。
lessmsi l -t Property <msi_name>
可能性のあるすべてのプロパティを確実に取得する1つの方法は、MSIファイルを使用してインストール、修復、またはアンインストールを実際に実行し、プロセスをログに記録することです。次のコマンドは、プロパティのみを記録し、他には何も記録しません。
<msi_name> /lp! <msi_property_logfile>
上記のコマンドは次と同等です:
msiexec /lp! <msi_property_logfile> /i <msi_name>
ただし、私の好みの方法は、実際にインストール/削除/修復を行わないことです(代わりに単純に抽出します)。この方法がlessmsiより優れている点は、サードパーティのユーティリティ(つまりlessmsi)を必要とせず、インストールを台無しにする必要がないことです。プログラムを実際にインストールするのに十分なディスク容量がある場合、次のことができます。
msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>
<absolute_path_to_extract_to>
は存在しないディレクトリを指すことができることに注意してください(コマンドは必要なディレクトリを作成するか、失敗します)。
何らかの理由でインストールUIが嫌いな場合は、/qr
オプションを追加できます。オプションを追加すると、プロパティのログ記録プロセスを損なうことなくUIが「縮小」され、場合によっては削除されます。ただし、縮小UI(つまり/qb
| /passive
または/qn
| /quiet
)よりも「低く」なると、<msi_property_logfile>
一部のプロパティが失われる可能性があります。
私が今やっていることは、Carbon Powershellモジュールを使用することです。モジュールタイプをインストールするには:
Install-Module -Name 'Carbon' -AllowClobber
それから単に
msi your_msi_path.msi
例:
msi putty-64bit-0.70-installer.msi
ProductName ProductVersion Manufacturer ProductCode
----------- -------------- ------------ -----------
PuTTY release 0.70 (64-bit) 0.70.0.0 Simon Tatham 45b3032f-22cc-40cd-9e97-4da7095fa5a2
現在、おそらくそれを行う最良の方法は、PowerShellを使用することだと思います。以下は、非常にうまく機能するスクリプトです。https: //gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c
Property
ます。MSIで突っ走るだけでなく、特定のワークフローやユースケースがありましたか?