2017-11-01 5 views
0

私のプログラムの2つのインスタンスで作業するときに設定ファイルを保存する際に問題が発生しています。2番目のインスタンスの設定ファイルを保存できません

Class MainWindow 
    Dim config As System.Configuration.Configuration 

    Public Sub New() 
     config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None) 
    End Sub 

    Protected Overrides Sub OnClosing(e As CancelEventArgs) 
     config.Save(ConfigurationSaveMode.Modified, True) 
    End Sub 
End Class 

最初のインスタンスは、決算上の設定を保存し、しかし、すぐに、私は2番目のインスタンスを閉じますしようとしていますとされ、config.Save:私はそのように見える単純な例のプロジェクトでこの問題を再現することができました(ConfigurationSaveMode.Modified、True)は、設定ファイルが別のプログラムによって変更されたというエラーを投げています。私は誰かがその問題を手伝ってくれることを願っています。前もって感謝します。

編集:MyBaseコール

EDIT2を削除するには忘れ:Chillzyの提案を試みたが、それは同様に失敗します。

Protected Overrides Sub OnClosing(e As CancelEventArgs) 
     Dim mdate As String = Date.Now.ToString("yyyyMMdd_HHmmss") 
     Dim mptpath As String = Path.GetDirectoryName(config.FilePath) & "\" & mdate 
     config.SaveAs(mdate, ConfigurationSaveMode.Full, True) 
     File.Delete(fpath) 
     File.Move(mptpath, fpath) 
    End Sub 
+0

なぜループ内で同じ関数を呼び出すのですか? config.Save(ConfigurationSaveMode.Modified、True) MyBase.OnClosing(e) –

答えて

0

あなたはOnClosing

Protected Overrides Sub OnClosing(e As CancelEventArgs) 
     config.Save(ConfigurationSaveMode.Modified, True) 
    End Sub 
+0

これは問題ではありません。私はまだエラーが発生します。 –

+0

あなたのタスクマネージャーに行き、あなたのアプリに関連するすべてのプロセスを閉じます。あなたはその無限ループを作成したので、彼らはまだバックグラウンドで実行されています。あなたはウィンドウ上でセッションを閉じて、再び開くことができます。コードを試してください。 –

+0

まだ動作しませんが、努力のおかげです。 –

0

ありの終わりにOnClosingを呼び出すことによって、ループを作っています。あなたは設定ファイルをロードしてコピーし、次に保存します。 saveasファイルを現在の設定ファイルとして再読み込みします。あなたの道を逆にする

Imports System.Configuration 
Imports System.IO 

Public Class Form1 

    Dim config As System.Configuration.Configuration 
    Dim fpath As String = "" 
    Dim mptpath As String = "" 
    Public Sub New() 
     config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None) 
     fpath = config.FilePath 
     Dim mdate As String = Date.Now.ToString("yyyyMMdd_HHmmss") 
     mptpath = Path.GetDirectoryName(config.FilePath) & "\" & mdate & ".config" 
     config.SaveAs(mptpath, ConfigurationSaveMode.Full, True) 
     config = System.Configuration.ConfigurationManager.OpenExeConfiguration(mptpath) 

    End Sub 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 

    End Sub 

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing 
     File.Delete(fpath) 
     config.SaveAs(fpath, ConfigurationSaveMode.Full, True) 
     File.Delete(mptpath) 
    End Sub 
End Class 
+0

ありがとう、Chillzy。はい、私はアプリケーションを2回実行しています。 1つのアプリケーションを閉じて、2つ目のアプリケーションを閉じようとすると、クラッシュします。 –

+0

プロセスは閉じていますが、問題は最初のインスタンスがconfigを変更していて、2番目のインスタンスが終了しようとしたときに通知していることです。最初の人が行った変更を無効にする方法が必要です。 VSを使用する機会があれば、簡単にこの問題を再現できます。 –

+0

Lifesaver!ありがとうございました。どうやら、SaveAsの代わりにSaveAsを使用すれば十分です。 –

関連する問題