- - PR -
Windowsアプリのインストールフォルダを知る
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-12-28 10:57
いつもお世話になっております。
今日になって納入済ソフトに不具合が発生しました。 開発言語:C# 対象OS:XP アプリケーションのインストールフォルダに存在する、 一部ファイルを差し替えれば解消する問題です。 対策として、ファイルの差し替えを行う何かの提供を検討しています。 問題が、アプリケーションのインストールフォルダを知る手段が分かりません。 レジストリから特定できますでしょうか? みなさんお忙しいところ申し訳ありません。 助言をお願いします。 | ||||||||
|
投稿日時: 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 | ||||||||
|
投稿日時: 2007-12-28 11:25
インストール時の情報はレジストリのHKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstallに保存されています。ですが、インストーラの種類やバージョンによって書き込まれる内容やキーはまちまちです。できればこの情報に頼らず、インストール時に別途レジストリにインストールパスを格納しておくことをお勧めします。
#以前、更新するファイルを全てのディスクから検索して探すパッチがあったなーと #導入時間の大半がファイルの検索に費やされていたっけ。 | ||||||||
|
投稿日時: 2007-12-28 11:36
ちなみにVisualStudio2005で作成したインストーラーだと
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall の下にあるInstallLocationは空でした。 格納しといて損はないはずなのに。。。 | ||||||||
|
投稿日時: 2007-12-28 11:38
アプリケーションのインストールフォルダを必要としているということは インストーラでインストールを行ったアプリケーションということでしょうか。 だとすれば、勝手に書き換えると修復機能が働いて元に戻る可能性はないですか。 (正式な名前は忘れたけど、そういう機能がありますよね) なので、アップデート用のインストーラを作成して、そいつでファイルを書き換えて やるべきかもしれません。 ただ VS Setup でアップデート用のインストーラを作れるかどうかはわかりません。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||
|
投稿日時: 2007-12-28 11:50
お忙しいのに皆さん沢山のアドバイス、本当にありがとうございます。
アドバイスいただいた内容を基に、早速試してみます。 まずは取り急ぎお礼をさせて頂きます。 | ||||||||
|
投稿日時: 2007-12-29 01:27
現在は Windows Installer エンジンを使用するのが推奨なので、Windows Installer が独自に管理しているレポジトリのどこかに記憶されているんだと思います。 ですが、レジストリを含めて、ここら辺の情報は「インストーラエンジン用」の情報が格納されているわけで、それをアプリケーションの都合で参照するのはやめといた方が基地だと思います。 「アプリケーションの都合」でインストールフォルダの位置を知りたいのであれば、アプリケーションのインストーラで必要な情報を記録(まぁ大体レジストリでしょうけど)するのがよろしんじゃないでしょうか。 | ||||||||
|
投稿日時: 2007-12-29 16:18
下記配下に存在しますね。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData ただ、registry を直接参照するのは問題があるので、API を利用するべきでしょう。 Windows Installer WMI にも専用の class があります。 ただし、どちらも Windows Installer 限定です。
なぜでしょう?好き勝手に書き込むならともかく、参照なら問題無いと思います。 むしろ application 独自の管理方式をとることにより、このての情報を一元管理できなくなり、system 管理がやりづらくなると思っています。 もっとも、installer で upgrade install するとか patch を適用するとか、そういう方法をとるべきだと思いますが。 _________________ |