インストーラーで環境変数を設定する(その1)

前回、インストール先のフォルダをデフォルト以外に指定できたものの、今度は環境変数の設定で問題にぶち当たる。

インストーラーを作ろうとしているのは、もともとはUnix/Linux系のシステムで開発されたアプリケーションです。
こういう場合って必ずしもという事ではないと思いますが、特定の環境変数、具体的には「Path」の設定が必要になります。

設定したい環境変数は以下の2つ

path      = [インストールフォルダ]\bin
raypath  = [インストールフォルダ]\lib

この2つのうち、pathはすでに定義されている可能性が高いので、実際には既存の設定内容に、上記を加える必要があります。

例)すでにpathが設定されていたら、追加する

path = C:\hoge;
       ↓
path = C:\hoge; [インストールフォルダ]\bin

以下は手作業で設定してみた画面。

単に環境変数を追加するだけじゃなくて、ポイントは次の2点。

  • 既存の設定を残しながらPathを設定。
  • アンインストール時には、追加したところだけ削除する。


それで、以下いろいろ試行錯誤してみましたが、結果からいうとまだ解決できていないです。
できなかったけど、メモとして残して置きたいので書いてみました。


レジストリの書き換えで、対応できないか試す

ユーザー環境変数はここの情報によるとレジストリにの以下の箇所に書き込まれているらしいので、これをインストーラーで設定します。

HKEY_CURRENT_USER\Environment

まずはVS2010のメニューから[表示]-[エディター]-[レジストリ]を選択して、レジストリエディターの画面を表示します。
そして環境変数用にキーを追加してみる。


ビルドしてインストールを実行してみると、
指定した環境変数は登録されたけど、Pathは既存の設定に上書きされた状態。当たり前だわな、これは。

既存の環境変数を参照して書き換える方法はないか、さらに調べる。

レジストリ検索を試す

調べてみると、「起動条件」の「レジストリ検索」でレジストリの情報を取得できそうなので試してみる。こことかここのサイトの情報を参照。


インストールの必須条件のチェックの部分でレジストリの情報を取得。それを使って、レジストリの設定を書き換えることができそう。

メニューからを [表示]-[エディター]-[起動条件]を選択して起動条件エディターを表示。

右クリックで、レジストリ検索を追加する。
レジストリ検索の設定で、Pathを検索してプロパティとして受け取るように指定する。

指定は検索するレジストリを、細かく分けて指定する。内容は以下。

Property: REGPATH  ←検索結果を受け取るプロパティ。後でレジストリの指定で利用する。
RegKey: Environment ←検索するレジストリのキー
Root: vsdrrHKCU    ←検索するレジストリのルート(HKEY_CURRENT_USER)
Value: path       ←検索する値。

そしたら、今度はレジストリエディターで、上記で指定したREGPATHをpathの指定箇所に加える。
ビルドしてインストールを実行してみる。

お、いい感じですね。既存のPathの設定に、パスが追加されている。

で、こんどはアンインストールを試してみると。。。

pathが根こそぎ消えますね。これもやっぱりというか、予想してた通りの動き。
それにしても、raypathの方は、なんで消されずに残ってるんだろ?これは動きとして不自然。

あれこれraypathについて試してみると、キーを追加する際に「文字列の値」で追加するとアンインストール後も残される。

「環境文字列」として追加すると、アンインストール時に削除される。

後者の方が環境変数っぽいんだが、登録してもコマンドプロンプトから参照しようとすると環境変数として登録されていないと怒られる。
なんで???

いずれにしてもレジストリ検索を使う方法でもダメってことですね。そうそううまくは行かないか。。。

つづく。







コメント

このブログの人気の投稿

TabError: inconsistent use of tabs and spaces in indentation

マクロを含んだ.XLSがExcel2010で開けない

using ディレクティブまたはアセンブリ参照が不足しています。