DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Visual Studioでアプリケーションの設定を保存する方法

環境/言語:[vs 2010]
分類:[.NET]

Visual Studioでアプリケーションの設定を保存したいと思っています。下記のサイトを見て、プロジェクトのプロパティを表示し「設定」タブを選択し、設定を行ないました。

http://dobon.net/vb/dotnet/programing/mysettings.html

具体的には、下記のような値です。

名前 = textPath
型 = String
値 = C:\mytext.txt

Formにテキストボックスを配置し、フォームロード時にテキストボックスに値を表示させています。
コードは下記のようにしています。

myText.Text = Properties.Settings.Default.textPath;

これは問題無く動きます。

やりたい事は、アプリケーションインストール時にユーザーは好きなフォルダにアプリケーションをインストールできるようにしています。
例えば、C:\Program Files\myApplicationや、D:\ourApplication など任意の場所にインストール可能です。

仮に「C:\Program Files\myApplication」にアプリケーションをインストールしたとします。インストール時に同時にアプリケーションが配置されているフォルダに「mytext.txt」を配置します。

このmytext.txtまでのフルパスを「設定」の「textPath」の「値」として設定したいと思っています。初回インストール時に、設定の値にフルパスを取得して保存する事は可能でしょうか?
■No32499に返信(zzr400さんの記事)
> myText.Text = Properties.Settings.Default.textPath;
C# をお使いなのですね。

> 初回インストール時に、設定の値にフルパスを取得して保存する事は可能でしょうか?
『EXE と同じ場所にある mytext.txt』というパスを取得したいなら
 string exePath = System.Reflection.Assembly.GetEntryAssembly().Location;
 string exeDir = System.IO.Path.GetDirectoryName(exePath);
 string txtPath = System.IO.Path.Combine(exeDir, "mytext.txt");
にて取得できます。


なお、アプリケーションのあるインストール先(Program Files等)というのは、
一種のシステム領域です。アプリケーションからその mytext.txt を
読み込むことは可能ですが、書き込みについては制限されますのでご注意下さい。
■No32500に返信(魔界の仮面弁士さんの記事)

> 『EXE と同じ場所にある mytext.txt』というパスを取得したいなら
>  string exePath = System.Reflection.Assembly.GetEntryAssembly().Location;
>  string exeDir = System.IO.Path.GetDirectoryName(exePath);
>  string txtPath = System.IO.Path.Combine(exeDir, "mytext.txt");
> にて取得できます。

「System.Reflection.Assembly.GetEntryAssembly().Location;」は
知らなかったのですが

string txtPath = System.IO.Path.Combine(Application.StartupPath, "mytext.txt");

ではダメなんでしょうか?使い処と言うか、違いが判りません。
使い処、違いなどが判りましたらご教授願います。
2014/07/27(Sun) 01:12:04 編集(投稿者)

■No32502に返信(エドさんの記事)
> 「System.Reflection.Assembly.GetEntryAssembly().Location;」は
> 知らなかったのですが

これですね。自パスを得る方法が沢山載っていますよ。
http://dobon.net/vb/dotnet/vb6/apppath.html


> string txtPath = System.IO.Path.Combine(Application.StartupPath, "mytext.txt");
たとえば WPF やコンソールアプリケーションなどで上記を使う場合、
System.Windows.Forms.DLL を追加で参照設定する必要があります。

また、Excel VSTO などにおいては、Application.StartupPath プロパティは
自アプリのパスでは無く、XLSTART フォルダのパスを返します。
これは、VSTO で「Apllication」と書いた場合、System.Windows.Forms.Application クラスを
指すのではなく、Microsoft.Office.Interop.Excel.Application クラスを
意味する為です。

ちなみに、Excel VSTO で System.Windows.Forms.Application.StartupPath を
呼び出した場合は、呼び出し元の Excel.exe のあるフォルダを返します。


> ではダメなんでしょうか?使い処と言うか、違いが判りません。
大抵の場合は同等のパスが得られますので、通常はどちらでも問題無いでしょう。
Application.StartupPath が手軽で良いかもしれませんね。

細かな違いについては、上記のページをご覧ください。たとえば、VSTO においては
Assembly.GetEntryAssembly() は null を返していたかと思います。
■No32499に返信(zzr400さんの記事)
> やりたい事は、アプリケーションインストール時にユーザーは好きなフォルダにアプリケーションをインストールできるようにしています。
> 例えば、C:\Program Files\myApplicationや、D:\ourApplication など任意の場所にインストール可能です。

便乗質問で恐縮ですが、VisualStudioでDebugじゃないコンパイルをして、Releaseフォルダに吐出されたEXEファイルを配布するのに代えて、インストールEXEを配布するメリットってどういうところにあるのでしょうか。

僕だったら、ベクターからダウンロードしたソフトウェアが単なるEXE形式ではなく、インストーラー付きEXEだったとしたらちょっと嫌だなぁ〜って思っちゃいます。結局EXEファイルを実行している時点で同じでしょうけれど、、、気持の問題ですが。
魔界の仮面弁士さん

System.Reflection.Assembly.GetEntryAssembly().Location;

は知りませんでした。こちら参考にさせて頂きます。

>一種のシステム領域です。アプリケーションからその mytext.txt を
>読み込むことは可能ですが、書き込みについては制限されますのでご注意下さい。

C:\ドライブ直下にファイルを配置していましたが、ユーザーによっては書き込みが制限されていました・・・
お教え頂きありがとうございます。


エドさん、魔界の仮面弁士さん

System.IO.Path.Combine(Application.StartupPath, "mytext.txt");
こちらの方法も知りませんでした。こちら、簡単にできそうです。どちらも試してみたいと思います。ありがとうございます。
■No32505に返信(野々村59さんの記事)

> 便乗質問で恐縮ですが、VisualStudioでDebugじゃないコンパイルをして、Releaseフォルダに吐出されたEXEファイルを配布するのに代えて、インストールEXEを配布するメリットってどういうところにあるのでしょうか。

このご質問の内容は、このスレッドの話題からはあまりにかけ離れてしまっているように思われます。この掲示板では、はじめの質問と関連性の薄い質問を同じスレッドに投稿することを禁止しています。お手数ですが、新しいスレッドを作成してご質問ください。

よろしくお願いいたします。
■No32504に返信(魔界の仮面弁士さんの記事)

なるほど、ありがとうございました。
勉強になりました。
皆様、色々勉強になりました。ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板