メールの詳細(トピック表示)
はじめまして。宜しくお願いします。
msiが以下のキーにレジストリを作成することを知りました。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\(SecurityID)
ここで疑問なのですが、
msiは上記キーに必ずレジストリを自動生成するのでしょうか。
このレジストリを使用したいのですが、キーの場所に確信が持てず、困っています。
msdn等に、上記キーにレジストリが自動生成されると明記されたページはありませんでしょうか。
自分でググってみたものの、見つけられておりません。。
みなさんお忙しいところ申し訳ありません。
おしえてください。
読み込み中...-
MLNo.1345
とっちゃんさん
(0) 2008/01/07 12:25 [メール表示する]

とっちゃんです。
>msiが以下のキーにレジストリを作成することを知りました。
>HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\(SecurityID)
>
>ここで疑問なのですが、
>msiは上記キーに必ずレジストリを自動生成するのでしょうか。
>このレジストリを使用したいのですが、キーの場所に確信が持てず、困っています。
>
このキーは存在自体がUndocumentなものですので、つくるかどうかはわかりません。
実際、OSによって若干異なる部分もありますので...
>msdn等に、上記キーにレジストリが自動生成されると明記されたページはありませんでしょうか。
>自分でググってみたものの、見つけられておりません。。
>
インストールされているか?という情報であれば、
MsiQueryProductState API を使うことで確認ができます。
また、いくつかの詳細なら、MsiGetProductInfo などでも取得できますよ。
レジストリの情報は、複数のOSや環境で実際に比較してみればわかりますが...
WindowsInstallerのバージョンが変わったなどで変更が入る可能性はあります。
ですので、そこを頼りに何かを行うというのは極力さけたほうがよいでしょう。
// とっちゃん(高萩 俊行)
// http://blogs.wankuma.com/tocchann/
// Microsoft MVP for Windows-SDK (Oct 2005 - Sept 2008)
// WindowsInstallerの話題は http://www.freeml.com/msi まで

- MLNo.1346 zimaさん (0) 2008/01/07 13:12 [メール表示する]
- MLNo.1347 NintyNineさん (0) 2008/01/07 13:25 [メール表示する]
-
MLNo.1348
とっちゃんさん
(0) 2008/01/07 13:26 [メール表示する]

とっちゃんです。
>大変参考になりました!!
>今回のソフトは特定顧客向けアプリで、
>OSはXP SP2(Pro,Home Edition)で揃えてあります。
>それでも環境に依存するでしょうから、
>例のキーに必ず所望のレジストリが存在するとは言い切れないでしょうか・・
>
あるとは言えませんね。
実際は、インストーラ側の設定(このユーザーのみとか)でも影響を受けますし
将来的にどこが影響してくるかわからないというより、もしかしたら
いずれ場所ごと移動なんてことも起こりかねませんし。
APIレベルであれば、内部状態が大幅に変更されても互換性維持は
できると思いますが、直接値参照という場合、互換性が確保されることは
まずもってあり得ないといえますので。
>ちなみに用途なんですが、
>納入済みソフトがインストールされているパスの特定です。
>
>MsiGetProductInfoは今調べていますが、
>所望するパスを取得する手段はないでしょうか。
>
もし、件のレジストリにインストール先のパスが書かれているのであれば
MsiGetProductInfo の第二パラメータ(2個目の引数)に、INSTALLPROPERTY_INSTALLLOCATION
を指定すれば、取得できると思います。
ただし、ここで取得できるのは、インストーラが
ARPINSTALLLOCATION プロパティにインストール先を設定した場合のみですが。
ところで、この情報は、これからインストールしようとしている製品のインストーラで
利用するのでしょうか?
もし、そうであれば、APIを使ったカスタムアクションもアリですが
CompLocator を利用してみるというのもよいかと思います。
この場合、検査対象のComponentIdがわかってないとだめですけど...
// とっちゃん(高萩 俊行)
// http://blogs.wankuma.com/tocchann/
// Microsoft MVP for Windows-SDK (Oct 2005 - Sept 2008)
// WindowsInstallerの話題は http://www.freeml.com/msi まで

-
MLNo.1349
渋木宏明(ひどり)さん
(0) 2008/01/07 13:58 [メール表示する]

渋木です。
> 納入済みソフトがインストールされているパスの特定です。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=42908&forum=7&start=
0
と同じ人でしょうか?
既にコメントがついていますが、Windows Installer が管理するレポジトリの実装
の詳細は undocumented です。
何らかの理由でそれらの情報が必要な場合は MSI APIs や Windows Installer の
COM インターフェースを利用して取得することになります。
ですが
> 納入済みソフトがインストールされているパスの特定です。
の理由が、「インストール済みファイルの一部差し替え」などが目的であるなら、
@ITでも同じようにコメントしていますが、msp やアップグレードインストーラを
作成するのが正道です。
--
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual Developer - Visual C#

-
MLNo.1350
社本@ネオニートさん
(0) 2008/01/08 09:48 [メール表示する]


社本@ネオニートです。
> もし、件のレジストリにインストール先のパスが書かれているのであれば
> MsiGetProductInfo の第二パラメータ(2個目の引数)に、
> INSTALLPROPERTY_INSTALLLOCATION
> を指定すれば、取得できると思います。
そうですね。特に難しいAPIじゃありません。
一応、ラップした関数を紹介しますね。
■プロダクト情報の取得 - for Programmers
http://www.wac-jp.com/programmers/win32/MsiHelper_GetProductInfo.html
// 社本 明弘
// http://www.ailight.jp/blog/sha256/
// Microsoft MVP for VC++ (Oct 2003 - Sep 2008)

メールへの返信はMLのメンバーしかできません。


