任意のユーザー、ワークステーション固有の設定ファイルの場所

マシン固有の設定ファイルを保存する正しい場所はどこですか?ファイルは時々変更され、どのユーザーからもアクセス可能である必要があります(マシンごとに1つの設定)。 app.configを変更したくないのは、新しいリリースで上書きされ、許可の理由からです。 ファイルは最初の開始時に作成され、新しいバージョンのためにそこに残ります。 よろしく

1
ハードウェア(シリアルポート)が接続されていますが、ポート設定はすべてのマシンで異なります。だからセットアップが行われたら、これ以上何も変更する必要はありません。今私はファイルを置くべき場所が不思議です。
追加された 著者 Rolfi,
あなたは 'machine config'ファイルをどういう意味ですか? NETアプリケーションごとに1つのマシンコンフィグファイルがありますので、あなたの意志で変更するべきではありません。アプリケーション固有の設定ファイルについてお話ししていますか?
追加された 著者 Steve,

1 答え

.NET Frameworkは既にマシン設定ファイルを使用しています。マシン設定ファイルには、そのマシンで実行されるすべての.NETアプリケーションによって共有される設定が含まれていますが、探しているようには聞こえません。

アプリケーションで設定ファイルを変更する必要がない場合は、XMLファイルの設定を実行可能フォルダに保存するのが最も簡単な方法です。現在のディレクトリからアプリケーションの設定を簡単に読み込むことができます。ファイルの名前は任意に指定できます。

ただし、アプリケーション内から設定ファイルを変更する必要がある場合は、すべてのユーザーがアプリケーションフォルダ内のファイルに書き込むために必要な権限を持つわけではないので、このようにすることはお勧めしません。その場合、設定ファイルを独立したストレージに保存することをお勧めします。

隔離されたストレージは、アプリケーションのバージョン番号を変更したときにストレージが "失われない"ことを確認するのに少し厄介なことがあります。また、マシン上で実行されているすべてのアプリケーションからアクセス可能な設定を保存する場合は、少し難解です。これまでは、ソフトウェアスイート内の複数のアプリケーションで共有される独立したストレージを作成する必要があったため、次のようなクラスを作成しました。

Public Class LocalStorage
    Implements ILocalStorage

    Private Const _CompanyUrl As String = "http://www.mycompany.com"

    Public Function Read(Of T)(ByVal fileName As String) As T
        Dim contents As T = Nothing
        Dim serializer As XmlSerializer = New XmlSerializer(GetType(T))
        Try
            Using stream As Stream = New IsolatedStorageFileStream(fileName, FileMode.Open, FileAccess.Read, GetStorage())
                Using xmlReader As XmlReader = New XmlTextReader(stream)
                    contents = CType(serializer.Deserialize(xmlReader), T)
                End Using
            End Using
        Catch ex As FileNotFoundException
        Catch ex As Exception
            Throw New IOException("Failed to read from " + fileName + " in local isolated storage", ex)
        End Try
        Return contents
    End Function

    Public Sub Write(Of T)(ByVal fileName As String, ByVal serializableDataObject As T)
        Dim serializer As XmlSerializer = New XmlSerializer(GetType(T))
        Try
            Using stream As Stream = New IsolatedStorageFileStream(fileName, FileMode.Create, FileAccess.Write, GetStorage())
                Using xmlTextWriter As XmlTextWriter = New XmlTextWriter(stream, New UTF8Encoding(False))
                    xmlTextWriter.Formatting = Formatting.Indented
                    Dim namespaces As XmlSerializerNamespaces = New XmlSerializerNamespaces()
                    namespaces.Add("", "")
                    serializer.Serialize(xmlTextWriter, serializableDataObject, namespaces)
                End Using
            End Using
        Catch ex As Exception
            Throw New IOException("Failed to write to " & fileName & " in local isolated storage", ex)
        End Try
    End Sub

    Private Function GetStorage() As IsolatedStorageFile
        Return IsolatedStorageFile.GetStore(IsolatedStorageScope.Machine Or IsolatedStorageScope.Assembly, Nothing, New Url(_CompanyUrl))
    End Function
End Class
1
追加された
非常に興味深いコードです。別のプロジェクトでこれを必要とするかもしれません。しかし、隔離されたストレージは現在のユーザーに結びついているので、探しているものではありません。
追加された 著者 Rolfi,
この場合ではありません。私の例の分離されたストレージは、同じマシン上のすべてのユーザーとアプリケーションによって共有されています。
追加された 著者 Steven Doggart,