MSIファイルからパブリックプロパティを取得する


12

Windows MSIファイルから利用可能なパブリックプロパティを取得するためのツールまたはメカニズムはありますか?

MSIファイルを提供するベンダーの中には、これらを自分で文書化していないものがあります。そのため、ソースコードなしでこれらを公開する方法があるかどうかを知りたいです。


8
MicrosoftのORCAPantarayのSuperORCA、および他のほとんどすべてのMSI編集により、テーブルを含む任意のテーブルを参照/編集できPropertyます。MSIで突っ走るだけでなく、特定のワークフローやユースケースがありましたか?
jscott

2
利用可能なパブリックプロパティを理解して、インストール中に正確に渡すことができるようにしたかったのです。ベンダーやドキュメントに問い合わせる必要はありません(常に可能であるとは限りません)。Puppetを使用すると、インストール中にMSIプロパティを渡すことができるため(misexec.exeをラップします)、この機能を使用すると便利です。
ケンバーバー

1
プロパティの表にはリストされていませんが、インストールを制御するために渡すことができる他のパブリックプロパティがある場合があります。プロパティは、条件(レジストリ検索など)に応じて動的に設定できます。したがって、ベンダーのドキュメントがより良い情報源です。
アレクセイイワノフ

また、詳細ログを使用してインストールを実行し、プロパティの値の変化を確認することもできます。
アレクセイイワノフ

遅延についてすみません-Orcaとその魅力的なものを試しましたが、@ AlexeyIvanovで説明した動作を確認しました-つまり、一部のプロパティが表示されません。splunk.msiとそのドキュメントでこれを確認しました。Orcaに表示されるものにはデフォルトがあると思いますが、これは正規のリストではありません。詳細なログ方法論についてもう少し説明できますか?
ケンバーバー

回答:


8

Lessmsiは、.msiから属性を取得するためのコマンドラインと対話型アプリケーションを提供します。

インタラクティブに、.msiを開き、テーブルビューに移動して、「プロパティ」を選択または入力します。ただし、これはプロパティ名を提供しますが、そのプロパティの有効な値を提供しません(または、見るべき適切な場所を発見していません)。

プロパティテーブルをコンソールに一覧表示するコマンドライン(イライラして、単純な> output.csvリダイレクトではキャプチャできません)

lessmsi l -t Property ...\path\to\setup.msi

1

MSIファイルはパブリックプロパティを内部データベースに格納するため、VBScriptとSQLを使用して実際にクエリを実行できます。

MSIファイルに保存されているすべてのプロパティを返すスクリプトの例を次に示します。大文字を使用してパブリックプロパティを定義するのが慣例であるため、通常はそれらを識別することができます。


1

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>一部のプロパティが失われる可能性があります。


この方法の問題は、実際にインストーラーを実行する必要があることです。非標準のtargetdirにインストールしたとしても、それでもレジスタが台無しになります。

0

私が今やっていることは、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

-1

現在、おそらくそれを行う最良の方法は、PowerShellを使用することだと思います。以下は、非常にうまく機能するスクリプトです。https//gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c


この答えは単なるリンクであり、変更/消失する可能性があります。
デビッドマコゴン

単なるリンクである他の答えがあります。私は他の人のコードをコピーして貼り付けるのは気分が悪いです。私の答えは別の選択肢を与えてくれると思いますし、私は本当に反対票を理解していません。
ジジ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.