- PR -

環境変数Pathへの追記について

投稿者投稿内容
なべとし
会議室デビュー日: 2006/12/13
投稿数: 15
投稿日時: 2006-12-13 08:33
VisualStudio2003で開発したC++プログラムを、
セットアッププロジェクトで作成したインストーラを使って、
インストールすることを考えております。
その際、環境変数Pathへ、あるフォルダのパスを追記したいと考えております。

その他のサイトの情報など色々と調べた結果、
インストールフォルダのパスを追記する方法は判明した
(実際に試してみて、できることも確認した)のですが、
(作成した.msiファイルを、Orcaを使って編集する方法です。)
インストールフォルダ以外のフォルダのパスを追記する方法がわかりません。


上記、まとめますと、例えば、
 インストールフォルダ:C:\Program Files\TestProgram
パスを通したいフォルダ:C:\Program Files\AnotherProgram\bin
とし、インストールフォルダにプログラムをインストールし、
パスを通したいフォルダに、インストーラからパスを通す、
ということです。

セットアッププロジェクトのレジストリエディタを使って、
直接レジストリに登録する方法も試してみたのですが、
環境変数Pathを上書きしてしまい、
既にPathに登録していたフォルダが消されてしまう状況です。
おそらく、先に環境変数Pathの値を取得し、
「その値;パスを通したいフォルダ」
といった文字列を生成し、
それを書き込めばよいのだと思うのですが、
セットアッププロジェクト内からその設定をどのように行うかがわかりません。

何か良い方法をお知りの方おられましたら、
ご教授願います。
ベテラン
会議室デビュー日: 2005/05/16
投稿数: 85
お住まい・勤務地: 千葉県在住
投稿日時: 2006-12-13 08:55
未記入さん、おはよう御座います。

過去LOGにこんなのがありました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28484&forum=7
ペンちゃん
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 61
投稿日時: 2006-12-13 09:58
マルチポスト
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200612/06120033.txt
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1009816&SiteID=7
なべとし
会議室デビュー日: 2006/12/13
投稿数: 15
投稿日時: 2006-12-13 11:29
>ペンちゃんさん
申し訳ございません。
マナー違反でしたね。
今後気をつけます。
なべとし
会議室デビュー日: 2006/12/13
投稿数: 15
投稿日時: 2006-12-13 11:35
>梶さん
過去ログを参考に、
以下のようなスクリプトを作成しました。
=====
Dim objShell
Dim strTargetPath
Dim strAddPath
Dim strRegistPath

Set objShell = WScript.CreateObject("WScript.Shell")

strTargetPath = objShell.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path")
strAddPath = "追記するパス"
strRegistPath = strTargetPath + ";" + strAddPath

'WScript.Echo strRegistPath
objShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path",strRegistPath
=====

このスクリプト単体ではうまくいくのですが、
カスタム動作に追加すると、
インストール処理の最後にエラーが発生してしまいます。
「このWindowsインストーラパッケージには問題があります。云々・・・」
というエラーです。

レジストリ登録を行わないスクリプト(メッセージボックスが表示される)を作成し、
それをカスタム動作のインストールに追加した場合はうまくいきます。
何か違いがあるのでしょうか。
とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2006-12-13 14:26
ここが一番伸びてるみたいなので、ここにぶら下げることにしますw

引用:

未記入さんの書き込み (2006-12-13 08:33) より:
VisualStudio2003で開発したC++プログラムを、
セットアッププロジェクトで作成したインストーラを使って、
インストールすることを考えております。
その際、環境変数Pathへ、あるフォルダのパスを追記したいと考えております。

その他のサイトの情報など色々と調べた結果、
インストールフォルダのパスを追記する方法は判明した
(実際に試してみて、できることも確認した)のですが、
(作成した.msiファイルを、Orcaを使って編集する方法です。)
インストールフォルダ以外のフォルダのパスを追記する方法がわかりません。


えっと、どの辺がわからないのでしょうか?
ORCAでどこのテーブルにデータを突っ込んだかによって、回答が...(^^;

ところで、Path 環境変数に追加したいということですが、そのパスは、システム全体で常に有効にする必要があるということでしょうか?(環境変数に追記するというのはそういう意味を持ちます)。

それとも、実際はインストールするEXEがそのパスを参照したいだけなのでしょうか?
どちらの方が望みなのかで設定方法が全く異なります(後者の方が圧倒的に簡単です)。

ちなみに実行するアプリが、.NET Framework 環境下で動いている場合、基本的に環境変数の Path 変数に設定しても意味がないと思います(確か、ファイル検索に Path 環境変数は使わないはずですので)。

ちなみに、後者のEXE専用パスの追加なら、レジストリエントリーを作るだけなので、VSだけでもできるかもしれません(試したことがないのでわかりません)。
なべとし
会議室デビュー日: 2006/12/13
投稿数: 15
投稿日時: 2006-12-13 17:00
>とっちゃんさん
ご丁寧にありがとうございます。

引用:

ところで、Path 環境変数に追加したいということですが、そのパスは、システム全体で常に有効にする必要があるということでしょうか?(環境変数に追記するというのはそういう意味を持ちます)。

それとも、実際はインストールするEXEがそのパスを参照したいだけなのでしょうか?
どちらの方が望みなのかで設定方法が全く異なります(後者の方が圧倒的に簡単です)。



上記についてですが、
前者の「システム全体で常に有効にする必要がある」が、
今回、行いたかったことです。

その後の検証により、
無事、行いたいことができるようになりました。
ありがとうございます。
上に示したスクリプトコードが、
一部、インストーラのカスタム動作から実行される際に、
うまく動作しないのが原因でした。
(WScript.CreateObject ⇒ CreateObject)

色々とありがとうございました。
なべとし
会議室デビュー日: 2006/12/13
投稿数: 15
投稿日時: 2006-12-13 17:02
>書き込んで頂いた皆様
マルチポストの件もあり、
色々とお騒がせし申し訳ありませんでした。
また、ありがたいコメントも頂きありがとうございました。

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