vb.netpathprogramdata

Change path to save mysettings - VB.NET 2008


I am using mysettings to save user settings.

This config file is saved in this path:

c:\ Documents and Settings \ \ [Local Settings] Application Data\\\

Is possible to change this path? For example, in my case I save app data in "ProgramData" folder (Vista & W7) and I would like save this config file in the same folder. Is possible?

Thanks in advance


Solution

  • From my experience, If you say you will transfer the setting from Win XP to Vista or W7, It is not possible to fix the folder path.

    However in one PC, You can Fix the folder path to ApplicationData\ApplicationName\anUgLycOde\ by sign your .exe by using sn tools. (the uglu code would change each time you rebuild and sign will prevent this).

    But if you think to make a cross Win version, I suggest you not to use My Settings but to use Xml serialization. Create a class to define your setting, Load and Save it by using Xml Serialize and Deserialize. You can put in My Document or same folder with *.exe.

    Here is the sample:

    Imports System.Xml.Serialization
    
    <XmlRoot("FTPSender")> _
    Public Class FTPSenderConfig
    
        ' default file path relative to the current .exe file path.
        Const fDefaultCFGFile As String = "FTPSender.cfg"
        Public Shared ReadOnly Property DefaultFilePath() As String
            Get
                Return IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) & "\" & fDefaultCFGFile
            End Get
        End Property
    
        Public Shared Function Load(Optional ByVal FilePath As String = Nothing) As FTPSenderConfig
            If FilePath Is Nothing Then FilePath = DefaultFilePath()
            If Not IO.File.Exists(FilePath) Then Return New FTPSenderConfig() ' load default settings
            Using sr As New IO.StreamReader(FilePath)
                Try
                    Dim x As New XmlSerializer(GetType(FTPSenderConfig))
                    Load = CType(x.Deserialize(sr), FTPSenderConfig)
                    'MyLog.WriteLog("FTPSender settings loaded.")
                Finally
                    If sr IsNot Nothing Then
                        sr.Close()
                        sr.Dispose()
                    End If
                End Try
            End Using
        End Function
    
        Public Shared Sub Save(ByVal FTPSenderConfig As FTPSenderConfig, Optional ByVal FilePath As String = Nothing)
            If FilePath Is Nothing Then FilePath = DefaultFilePath()
            If FTPSenderConfig Is Nothing Then Return
            Using sw As New IO.StreamWriter(FilePath)
                Try
                    Dim x As New XmlSerializer(FTPSenderConfig.GetType())
                    x.Serialize(sw, FTPSenderConfig)
                    'MyLog.WriteLog("FTPSender settings saved.")
                Finally
                    If sw IsNot Nothing Then
                        sw.Close()
                        sw.Dispose()
                    End If
                End Try
            End Using
        End Sub
    
            Dim fHost As String = "127.0.0.1"
            <XmlElement("Host")> _
            Public Property Host() As String
                Get
                    Return fHost
                End Get
                Set(ByVal value As String)
                    fHost = value
                End Set
            End Property
    
            Dim fUser As String = "guess"
            <XmlElement("User")> _
            Public Property User() As String
                Get
                    Return fUser
                End Get
                Set(ByVal value As String)
                    fUser = value
                End Set
            End Property
    
            Dim fPassEncrypted As String = EncDec.Encrypt("guess")
            <XmlElement("PassEncrypted")> _
            Public Property PassEncrypted() As String
                Get
                    Return fPassEncrypted
                End Get
                Set(ByVal value As String)
                    fPassEncrypted = value
                End Set
            End Property
    
            <XmlIgnore()> _
            Public Property Pass() As String
                Get
                    Return EncDec.Decrypt(fPassEncrypted)
                End Get
                Set(ByVal value As String)
                    fPassEncrypted = EncDec.Encrypt(value)
                End Set
            End Property
    
            Dim fTransferMode As String = MyFTPClient.TransferModeEnum.Passive.ToString()
            <XmlElement("TransferMode")> _
            Public Property TransferMode() As MyFTPClient.TransferModeEnum
                Get
                    Return [Enum].Parse(GetType(MyFTPClient.TransferModeEnum), fTransferMode)
                End Get
                Set(ByVal value As MyFTPClient.TransferModeEnum)
                    fTransferMode = value.ToString()
                End Set
            End Property
    
    End Class
    

    To use it simply as:

    Dim cfg As FTPSenderConfig
    
    cfg = FTPSenderConfig.Load() ' In Form_Load
    
    Dim h as String = cfg.Host
    cfg.Host = h
    
    FTPSenderConfig.Save(cfg) ' In Form_FormClosed