none
user.configファイルのパスについて RRS feed

  • 質問

  • visual basic 2013 expressでWindows desktopアプリを作成しています。

     

    exeファイル実行終了後に変数の保存を行い、exeファイル再実行時に保存した変数値を読み込もうと試みております。

    これを実現する為に、アプリケーション設定を行っています。

    [MyProject]から[設定]タブにてtest変数をスコープ=ユーザー、値=0で保存し

    以下のコードのような記述を行っております。

    Public test As Integer = My.Settings.test Public Class Test_Class Private Sub testbutton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles testbutton.Click test += 1

    My.Settings.Save() End Sub End Class

    本来であればexeファイルを終了時に値を保存し、exeファイル再実行時には前回の値からカウントアップを再開するはずですが、test変数はexeファイルを立ち上げるたびに初期値の「0」にリセットされているようです。

    [MyProject]→[設定]→[同期]を押すと「次の場所でuser.configファイルは見つかりませんでしたC:\Users\<username>\AppData\Local\<companyname>\<appdomainname>_<eid>_<hash>\<virsion>」といった警告文が表示されますので、user.configファイルが別の場所に保存されているか、作成されていないようなのですがどのように対処したら良いでしょうか。

    回答お願い致します。

    ---追記---

    実際にC:\Users\<username>\AppData\Local\を確認したところ<companyname>フォルダが作成されておりませんでした。

    アセンブリ情報にて会社名等指定しております。(関係ないかもしれませんが、全角文字使用が不安だった為念のため全て半角英数字での記述を行っております。)

    2015年3月27日 1:56

回答

  • こんにちは。

    設定ファイルへの反映をせずにSaveしているからということは無いですか?(コードを見た限りですが)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        test += 1
        My.Settings.test = test 'add
        My.Settings.Save()
    End Sub
    

    2015年3月27日 2:35
    モデレータ
  • user.configファイルはアプリケーション実行中、必要になったタイミングで自動的に作成されます。その際にディレクトリ等も作成されるため特に心配することはありません。

    その上で、Visual Basic IDE上にある[同期]機能についてですが、上述のようにアプリケーションを実行中に保存されてしまうものですから、アプリケーション実行開始時の初期値を再現するために設定をリセットする機能です。実行前などリセットされるべき設定がなければ気にする必要はありません。

    # なお、[同期]機能はVisual Basic専用の機能ですので.NET Framework全般は不適切です。オペレーターの方はフォーラム移動していただけたらと。

    2015年3月27日 2:37
  • C#でもVBでも、Saveメソッドによって、その時点でuser.configファイルを保存することができます。VBはそれに加えて、アプリケーション終了時に、user.configファイルを自動的に保存する機能があります。言ってみれば便利機能です。この便利機能はデフォルトでオンになっていますが、オフにすることもできます。オフにするには、プロジェクトのプロパティの「アプリケーション」タブの、「シャットダウン時に、My.Settingsを保存する」のチェックを外します。

    おそらく今回の問題は、Tak1waさんが書かれているように、単にMy.Settingsに書き戻していないだけのような気がします。試してみましたが、My.Settingsに書き戻さない場合、Saveメソッドを実行しても、user.configファイルは作成されませんでした。

    また、参考として、My.Settingsに書き戻しても、事前にSaveメソッドでuser.configを更新しておくと、アプリケーションのシャットダウン時に再度保存されることはありませんでした。以上から、いずれにしてもMy.Settingsに変化があった場合のみ、user.configファイルを作成、もしくは更新するようです。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年3月27日 7:01
    モデレータ

すべての返信

  • こんにちは。

    設定ファイルへの反映をせずにSaveしているからということは無いですか?(コードを見た限りですが)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        test += 1
        My.Settings.test = test 'add
        My.Settings.Save()
    End Sub
    

    2015年3月27日 2:35
    モデレータ
  • user.configファイルはアプリケーション実行中、必要になったタイミングで自動的に作成されます。その際にディレクトリ等も作成されるため特に心配することはありません。

    その上で、Visual Basic IDE上にある[同期]機能についてですが、上述のようにアプリケーションを実行中に保存されてしまうものですから、アプリケーション実行開始時の初期値を再現するために設定をリセットする機能です。実行前などリセットされるべき設定がなければ気にする必要はありません。

    # なお、[同期]機能はVisual Basic専用の機能ですので.NET Framework全般は不適切です。オペレーターの方はフォーラム移動していただけたらと。

    2015年3月27日 2:37
  • C#でもVBでも、Saveメソッドによって、その時点でuser.configファイルを保存することができます。VBはそれに加えて、アプリケーション終了時に、user.configファイルを自動的に保存する機能があります。言ってみれば便利機能です。この便利機能はデフォルトでオンになっていますが、オフにすることもできます。オフにするには、プロジェクトのプロパティの「アプリケーション」タブの、「シャットダウン時に、My.Settingsを保存する」のチェックを外します。

    おそらく今回の問題は、Tak1waさんが書かれているように、単にMy.Settingsに書き戻していないだけのような気がします。試してみましたが、My.Settingsに書き戻さない場合、Saveメソッドを実行しても、user.configファイルは作成されませんでした。

    また、参考として、My.Settingsに書き戻しても、事前にSaveメソッドでuser.configを更新しておくと、アプリケーションのシャットダウン時に再度保存されることはありませんでした。以上から、いずれにしてもMy.Settingsに変化があった場合のみ、user.configファイルを作成、もしくは更新するようです。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年3月27日 7:01
    モデレータ
  • 回答ありがとうございます。

     

    Tak1waさんの回答、My.Settingsに書き戻していない事が原因でした。

    変更後データの保存も行われ、以下のアドレスにuser.configファイルが作成されている事も確認できました。C:\Users\<username>\AppData\Local\<companyname>\<appdomainname>_<eid>_<hash>\<virsion>

    皆様お手数おかけして申し訳ありませんでした。ありがとうございました。

    2015年3月29日 23:59