- PR -

Windowsアプリのインストールフォルダを知る

投稿者投稿内容
moco
ベテラン
会議室デビュー日: 2006/05/01
投稿数: 54
投稿日時: 2007-12-28 10:57
いつもお世話になっております。
今日になって納入済ソフトに不具合が発生しました。
 開発言語:C#
 対象OS:XP

アプリケーションのインストールフォルダに存在する、
一部ファイルを差し替えれば解消する問題です。

対策として、ファイルの差し替えを行う何かの提供を検討しています。

問題が、アプリケーションのインストールフォルダを知る手段が分かりません。
レジストリから特定できますでしょうか?

みなさんお忙しいところ申し訳ありません。
助言をお願いします。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-12-28 11:17
レジストリを検索してみて、そのアプリケーションのインストールパスがあるか確認してみればいいと思います。
私の環境では
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components
の下に一応、インストールパスが存在しました。
ただ、全ての環境でそれを参照して問題ないのかはわかりません。

アプリケーションはインストーラーで配布しているのですよね?
ならバージョンを上げて上書インストールする、インストーラーを作ればいいだけの話のような気もします。


デプロイメントプロジェクトによるアップデート: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/deployment/upgrades.html
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-12-28 11:25
インストール時の情報はレジストリのHKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstallに保存されています。ですが、インストーラの種類やバージョンによって書き込まれる内容やキーはまちまちです。できればこの情報に頼らず、インストール時に別途レジストリにインストールパスを格納しておくことをお勧めします。

#以前、更新するファイルを全てのディスクから検索して探すパッチがあったなーと
#導入時間の大半がファイルの検索に費やされていたっけ。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-12-28 11:36
ちなみにVisualStudio2005で作成したインストーラーだと
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
の下にあるInstallLocationは空でした。
格納しといて損はないはずなのに。。。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2007-12-28 11:38
引用:

mocoさんの書き込み (2007-12-28 10:57) より:

アプリケーションのインストールフォルダに存在する、
一部ファイルを差し替えれば解消する問題です。

対策として、ファイルの差し替えを行う何かの提供を検討しています。

問題が、アプリケーションのインストールフォルダを知る手段が分かりません。
レジストリから特定できますでしょうか?


アプリケーションのインストールフォルダを必要としているということは
インストーラでインストールを行ったアプリケーションということでしょうか。
だとすれば、勝手に書き換えると修復機能が働いて元に戻る可能性はないですか。
(正式な名前は忘れたけど、そういう機能がありますよね)

なので、アップデート用のインストーラを作成して、そいつでファイルを書き換えて
やるべきかもしれません。
ただ VS Setup でアップデート用のインストーラを作れるかどうかはわかりません。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
moco
ベテラン
会議室デビュー日: 2006/05/01
投稿数: 54
投稿日時: 2007-12-28 11:50
お忙しいのに皆さん沢山のアドバイス、本当にありがとうございます。

アドバイスいただいた内容を基に、早速試してみます。

まずは取り急ぎお礼をさせて頂きます。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2007-12-29 01:27
引用:

格納しといて損はないはずなのに。。。



現在は Windows Installer エンジンを使用するのが推奨なので、Windows Installer が独自に管理しているレポジトリのどこかに記憶されているんだと思います。

ですが、レジストリを含めて、ここら辺の情報は「インストーラエンジン用」の情報が格納されているわけで、それをアプリケーションの都合で参照するのはやめといた方が基地だと思います。

「アプリケーションの都合」でインストールフォルダの位置を知りたいのであれば、アプリケーションのインストーラで必要な情報を記録(まぁ大体レジストリでしょうけど)するのがよろしんじゃないでしょうか。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-12-29 16:18
引用:
現在は Windows Installer エンジンを使用するのが推奨なので、Windows Installer が独自に管理しているレポジトリのどこかに記憶されているんだと思います。



下記配下に存在しますね。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData

ただ、registry を直接参照するのは問題があるので、API を利用するべきでしょう。

Windows Installer

WMI にも専用の class があります。
ただし、どちらも Windows Installer 限定です。

引用:
ですが、レジストリを含めて、ここら辺の情報は「インストーラエンジン用」の情報が格納されているわけで、それをアプリケーションの都合で参照するのはやめといた方が基地だと思います。



なぜでしょう?好き勝手に書き込むならともかく、参照なら問題無いと思います。
むしろ application 独自の管理方式をとることにより、このての情報を一元管理できなくなり、system 管理がやりづらくなると思っています。

もっとも、installer で upgrade install するとか patch を適用するとか、そういう方法をとるべきだと思いますが。
_________________

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