トップ回答者
VB2008 ClickOnceアプリケーションのexe.configのパス

質問
-
現在、仕事でVB2008 ClickOnceアプリケーションを開発しています。
顧客の環境で営業所が複数あるため、各営業所にDBサーバーを配置し、
それぞれの営業所は自営業所のDBサーバーへ接続するように
考えています。
ところが、顧客の役員のみ自由に接続先を切り替えてアプリケーションを
使用したいというご要望を頂きました。
接続先はexe.configに保持していますが、ClickOnceアプリケーションは
クライアント側でのインストールパスが動的であるため、のexe.configのパス
が不規則な文字列のフォルダになっています。
アプリケーションの機能としてexe.configの接続文字列を書きかえる機能を
実装するためにexe.configのファイルパスを取得したいのですが、
取得の方法はあるのでしょうか?
ご教授お願いいたします。
////////////////////////////////////////////////////////// nagano-item Mail: nagano@item-jp.com //////////////////////////////////////////////////////////
回答
-
ClickOnce の場合、app.config は ClickOnce のデータディレクトリに保管されるので、アセンブリとは異なる場所にあります。データディレクトリを取得するには、System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory で取得できます。(データディレクトリはバージョンアップ時に引き継がれるため、app.config に対しておこなった変更がバージョンアップ時にも反映されます)
System.Windows.Forms.Application 等からでも取得できます。(実行環境によって返される値がかわるようになっているため、ApplicationDeployment より便利に利用できます)
- 回答としてマーク naga0318 2011年4月28日 0:27
すべての返信
-
>実装するためにexe.configのファイルパスを取得したいのですが、
直接のお答えとしては
System.Reflection.Assembly.GetEntryAssembly().Location
で実行ファイルパスを取得できますので、それに「.config」を付け足せば良いということになります。
が、設定ファイルの項目へは
Properties.Settings.Default.[設定項目名」
という形でアクセスできます(更新も可能です)ので、
こちらを使用されたほうがスマートかもしれませんので、ご検討されてみてはいかがでしょうか。
(上記はWinForm,WPFともに使用できます。)
以上、よろしくお願い致します。 -
ClickOnce の場合、app.config は ClickOnce のデータディレクトリに保管されるので、アセンブリとは異なる場所にあります。データディレクトリを取得するには、System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory で取得できます。(データディレクトリはバージョンアップ時に引き継がれるため、app.config に対しておこなった変更がバージョンアップ時にも反映されます)
System.Windows.Forms.Application 等からでも取得できます。(実行環境によって返される値がかわるようになっているため、ApplicationDeployment より便利に利用できます)
- 回答としてマーク naga0318 2011年4月28日 0:27
-
>K.Takaokaさん
ご指摘ありがとうございました。
>nagano-itemさん、K.Takaokaさん
書き換え可能なuser.configの位置の取得は
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory
を使うべきでした。
exe.configと混同しておりました。
申し訳ありません。
書き換えはいつも
Properties.Settings.Default
から行っていたもので、不慣れなまま返信してしまってすみませんでした。
大変勉強になりました。
ありがとうございました。