- PR -

InstallScriptでレジストリキー

投稿者投稿内容
クロスポ
常連さん
会議室デビュー日: 2005/07/27
投稿数: 22
投稿日時: 2005-08-01 13:00
InstallScriptでレジストリキーを取得し、
取得したレジストリの値をINSTALLDIR
(ダイアログのフォルダ選択に利用する)には
どのようにすればよいのでしょうか。
初心者ですいません。
よろしくお願い致します。
とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2005-08-01 13:26
とっちゃんです。

通常は AppSearch(システム検索)を利用します。
より具体的には、一度ヘルプを見てもらうのが一番確実です。
まずは、ヘルプで「システム検索」についていろいろと調べてみてください。

その上で、システム検索では実現不可能ということであれば、
何が原因で適応できないのかを明示すればより具体的な解決策が
出てくるのではと思います。
クロスポ
常連さん
会議室デビュー日: 2005/07/27
投稿数: 22
投稿日時: 2005-08-01 15:14
ご返信ありがとうございます。

システム検索をキーに検索したところ。
ダイレクトエディタを利用することで、
レジストリから読み込んだ値をダイアログに
設定することはできました。

今度はダイアログで設定した値をレジストリ
に書き込む処理ですが、
現在考えているのは、InstallScriptで
RegDBSetKeyValue関数を実行する処理を
カスタムアクションで呼び出す方法を
イメージしてますが、こちらも
ダイアログで選択した値をInstallScript内
で利用する方法がわかりません。

お手数ですが、よろしくお願いできないでしょうか。
とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2005-08-01 17:38
とっちゃんです。

> システム検索をキーに検索したところ。
> ダイレクトエディタを利用することで、
> レジストリから読み込んだ値をダイアログに
> 設定することはできました。

えーっと...プロパティへの設定ではないですか?
ダイレクトエディタを利用して設定することも可能ですが、
ツリー内に「システム検索」というところがあるので
マシンからの情報取得についての設定はダイレクトエディタを
駆使しなくてもできると思うのですが...

> 今度はダイアログで設定した値をレジストリ
> に書き込む処理ですが、
> 現在考えているのは、InstallScriptで
> RegDBSetKeyValue関数を実行する処理を
> カスタムアクションで呼び出す方法を
> イメージしてますが、こちらも
> ダイアログで選択した値をInstallScript内
> で利用する方法がわかりません。

レジストリへの書き込み作業はカスタムアクションを
使うのではなく、コンポーネントの設定で行います。

レジストリがそれだけで独立した情報であればそのレジストリだけのコンポーネントを
何らかのファイルに従属するのであればそのファイルのコンポーネントの一部として
設定します。

レジストリデータとして用意できる項目は
文字列(REG_SZ)、数値(REG_DWORD)、
バイナリ(REG_BINARY)、複数文字列(REG_MULTI_SZ)の
4種類しかありませんが、ほとんどの場合はこれらのいずれかで
事足りると思います。

キー名、値名、値のいずれにもプロパティの内容を設定することができますので
値の種類が上記4つのいずれかであれば、コンポーネントのデータとして
設定したほうがいろんな意味で楽です。


おまけ
カスタムアクションは WindowsInstaller に設定機能が用意されていない場合に利用します。
MFC や .NET Framework がOSの全機能を網羅していないのと同じで、
WindowsInstaller にもできることの限界があります。

そういったものを制御したり、設定したい場合に
カスタムアクションとして用意することになります。

もちろん、レジストリにおいても、上述した4種類以外の
種類を設定したいという場合はカスタムアクションを
用意することになるわけですが。

WindowsInstaller でどこまでできるかについては
WindowsInstallerSDK のヘルプをみてください。
InstallShield のヘルプに組み込まれています(英語ですけどね)。

InstallShield の基本MSI は WindowsInstaller の全機能を
すべて利用可能になっていますので、WindowsIntaller でできることの
すべてが行えます(一部は、ダイレクトエディタで設定する必要がありますが)。

細かいことは他で紹介した、MLにて投稿するほうがより多数の方からコメントが
いただけると思います(@ITの会議室は、インストーラを主体にやってる人はあまり
多くないと思いますよ)。
クロスポ
常連さん
会議室デビュー日: 2005/07/27
投稿数: 22
投稿日時: 2005-08-01 17:56
毎度、ご連絡ありがとうございます。
コンポーネントの[詳細設定]-[アプリケーションパス]
のところで設定するんですかね。
この場合、アンインストール時にレジストリを残すよう
なことは行えるのでしょうか。

レジストリビューでレジストリフラグを「インストールのみ」
を指定しているのに、アンインストール時に
レジストリが消えてしまいます。

やはり、カスタムアクションでレジストリ登録
を行ってあげないと、レジストリは残ってくれ
ないのですかね。
とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2005-08-01 18:45
とっちゃんです。

> コンポーネントの[詳細設定]-[アプリケーションパス]
> のところで設定するんですかね。

これは、App Paths 専用です。
レジストリに書き込まれるという意味では同じですけど...

そこではなく、レジストリデータ(レジストリエディタと
同じアイコンのあるツリー)で、設定します。


> この場合、アンインストール時にレジストリを残すよう
> なことは行えるのでしょうか。
>
> レジストリビューでレジストリフラグを「インストールのみ」
> を指定しているのに、アンインストール時に
> レジストリが消えてしまいます。

「インストールのみ」はキーに対して設定するもので
値に対しては有効ではありません(詳しくはヘルプを検索してください)。

値を残したい場合は、専用のコンポーネントを用意して
そのコンポーネントをパーマネントにする必要があります。

「ですが」

レジストリは、その総量が増えれば増えるほどシステムに負担を
かけることになります。
HKEY_LOCAL_MACHINE なら起動時間が、HKEY_CURRENT_USER なら
そのユーザーのログオン時の初期化時間が増えます。
当然ながら、システムの利用するメモリー量も増えることになります。

アンインストールは不要になるものをすべて取り除く作業ですので、
ユーザーにとって無くてもよいものを残さないようにするのは
インストーラ作者にとってはある種の義務です。

アンインストール後もレジストリを残したままにしておくというのは
あまりお勧めできません。
どうしても情報として痕跡を残しておく必要があるのであれば、専用に
ファイルを用意するほうがよいと思います。


#先のコメントで 4種類と書いてましたが、REG_EXPAND_SZ も設定できます。
#メニューに無いので忘れてました。編集してもよいのですが、同じスレッドなので(^^;
クロスポ
常連さん
会議室デビュー日: 2005/07/27
投稿数: 22
投稿日時: 2005-08-01 22:04
ご返信ありがとう。
僕が考えていたのは、
InstallScriptでレジストリを設定
することができるので。
どうにかインストール時に設定
したフォルダパスを取得できれば
可能かと思っていました。

確かに、アンインストール時に
レジストリ値を残すのは、マイクロソフト
のアプリ概念に違反しますが、
今回どうしてもそのような作りにしよう
ということになっています。

アンインストール時にレジストリを消さない
ことと、インストーラ内で指定されたフォルダ
パスを取得することは一緒にはできないのですね。
クロスポ
常連さん
会議室デビュー日: 2005/07/27
投稿数: 22
投稿日時: 2005-08-02 10:14
お世話になります。
レジストリの読込みを「ダイレクトエディタ」で
行っていましたが、「システム検索」のが簡単
でした。ありがとうございます。
「ダイレクトエディタ」で行っていた
ことが簡単にシステム検索でできるのですね。

InstallScriptを利用して、きめうちなら
うまくいくんですが、どうしても変数を
取得できません。

スキルアップ/キャリアアップ(JOB@IT)