MSIを使用してWindows 7にプログラムをインストールする場合(すべてのWindowsバージョンについて知っておくと素晴らしいでしょう...しかし、今のところWindows 7で十分です)
...これらの変更はすべて相互に関連していますか?
- 特定のインストールに関連するすべてのデータが必要になった場合、どうすればそのデータ
を見つけることができますか? このデータを取得するためにレジストリを調べる必要がありますか? または、データにアクセスするためのより効率的または適切な方法が他にありますか?
3 に答える
MsiGetProductInfoEx 関数などの MSI API を使用します。Hans が言及しているように、レジストリ データは実装の詳細であるため、ほとんど文書化されていません。
レジストリとインストールをいじって、何ができるかを確認してきました。誰かが私の答えをさらに詳しく説明したり、修正を加えたりできる場合は、この答えは公式の情報源からではなく、観察からのみ得られるため、非常に高く評価されます。下の画像に見られるように、私が見つけたものを説明するいくつかの表を作成しました。また、必要な情報 (IE、MSI の ProductName または ProductCode プロパティ) にアクセスするために、WIX ( http://wixtoolset.org/ ) に出会い、Micrsoft.Deployment.Installer.dll や他のライブラリを使用しています。それらはかなり甘いので、WIXに含まれています。
ここで言及しているすべてのキーとコードの正式な用語を私は知りません...だから、それらが指定しているように見えるため、私がそれらを作ったように見えても驚かないでください。
更新: MSIドキュメントで、さらに有用な情報を見つけました。
MsiGetProductInfoEx (場合によっては MsiEnumProductsEx) を使用して、インストールされている製品に関する情報を取得するプログラムによる方法をお勧めします。このアプローチを使用すると、ProductCode、ProductVersion、およびパッケージ コード (つまり、Revision Number Summary プロパティ) の値に対する変更を比較できます。ただし、アプリケーションを少し更新すると、ProductCode と ProductVersion が変更されないままになる可能性があります。一般的な小規模な更新では、1 つまたは 2 つのファイルまたはレジストリ キーのみが変更されます。この場合、パッケージ コードも変更する必要があります。ただし、言語トランスフォームが付属する製品には、トランスフォームのない製品と同じパッケージ コードが含まれている場合があります。
ユーザーがアプリケーションのバージョンを既にインストールしているかどうかを判断する必要がある独自の Windows インストーラー パッケージを開発している場合は、Windows インストーラー サービスを使用して、アプリケーションのインストール中に特定のファイルまたはディレクトリを検索できます。このアプローチでは、Windows インストーラー データベースに適切なテーブルを設定する必要があり、msi は AppSearch アクションを実行する必要があります。この方法は、次の場所で公開されている Microsoft の Windows インストーラーのドキュメントで説明されています。