Windows MSIファイルから利用可能なパブリックプロパティを取得するためのツールまたはメカニズムはありますか?
MSIファイルを提供する一部のベンダーは、これらのファイル自体を文書化していないため、ソースコードなしでこれらを公開する方法があるかどうか知りたいと思います。
Lessmsi は、.msiから任意の属性を取得するためのコマンドラインとインタラクティブアプリケーションを提供します。
インタラクティブに.msiを開き、Table viewに移動して「プロパティ」を選択または入力します。ただし、これはプロパティ名を示していますが、そのプロパティの有効な値を示していません(または、適切な場所を見つけていません)。
プロパティテーブルをコンソールに一覧表示するコマンドライン(イライラして、単純な> output.csv
リダイレクトではキャプチャできません)
lessmsi l -t Property ...\path\to\setup.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