2017-04-17 3 views
1

Ist es möglich, My.Settings.SomeString Wert einer Zielanwendung von einer anderen Anwendung programmgesteuert zu ändern?Wie ändert man den UserSettings-Wert einer App aus einer anderen App mit VB.Net?

Beispiel

Der Wert möchte ich ändern: enter image description here

+0

App-Einstellungen ausgelegt sind, so bearbeiten, dass eine App nur seine Einstellungen geladen werden kann, so dass Sie nicht in der Lage sein, es durch 'My.Setings' zu tun. Es kann auch durch die Bereitstellungsmethode (XCopy vs OneClick) kompliziert sein. Für gemeinsam genutzte Suite-Konfigurationen können Sie Daten selbst speichern, so dass andere Apps (nicht nur Ihre) auf sie zugreifen können. – Plutonix

+0

Können Sie es ein wenig klarer machen ... nur ein paar Teile von dem, was Sie gesagt haben ... :(#MyBad –

+0

Und bitte fügen Sie diese einfache Antwort mit Ihrer Erklärung ... (Ja, wenn möglich und Nein, wenn nicht) –

Antwort

0

Ja, das ist möglich.

Die My.Settings Konfigurationen in einer Datei gespeichert werden, die an der folgenden Position befinden:

C: \ Benutzer \ [your_username] \ AppData \ Local \ [App Verleger] \ [Name der Anwendung] \ [App Version #] \ Benutzer.config

Ich bin sicher, dass Sie das XML der Datei user.config für die Zielanwendung programmgesteuert in Ihre Anwendung laden, anpassen und dann speichern können.

Beim Öffnen der Zielanwendung würde die Datei user.config wie normal geladen und alle Änderungen, die Sie am XML vorgenommen haben, würden wiedergegeben.

0

Die Einstellungen werden in XML gespeichert. Standardmäßig heißt die Datei Settings.settings und befindet sich in Project Directory\My Project.

In Ihrem Beispiel + eine andere Einstellung, könnte die Datei wie diese

<?xml version='1.0' encoding='utf-8'?> 
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" 
       CurrentProfile="(Default)" GeneratedClassNamespace="My" 
       GeneratedClassName="MySettings" UseMySettingsClassName="true"> 
    <Profiles /> 
    <Settings> 
    <Setting Name="SomeString" Type="System.String" Scope="User"> 
     <Value Profile="(Default)">This is some string</Value> 
    </Setting> 
    <Setting Name="SomeOtherString" Type="System.String" Scope="User"> 
     <Value Profile="(Default)">This is some other string</Value> 
    </Setting> 
    </Settings> 
</SettingsFile> 

sehen Sie können generate vb.net classes from the XML wenn Sie VS 2012 oder neuer. Ich habe das gemacht, und hier sind die generierten Klassen. (Wenn Sie nicht mindestens VS 2012 haben, können Sie weiterhin Microsofts XML Schema Definition Tool verwenden).

<System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="http://schemas.microsoft.com/VisualStudio/2004/01/settings"), _ 
System.Xml.Serialization.XmlRootAttribute([Namespace]:="http://schemas.microsoft.com/VisualStudio/2004/01/settings", IsNullable:=False)> _ 
Partial Public Class SettingsFile 

    Private profilesField As Object 
    Private settingsField() As SettingsFileSetting 
    Private currentProfileField As String 
    Private generatedClassNamespaceField As String 
    Private generatedClassNameField As String 
    Private useMySettingsClassNameField As Boolean 

    Public Property Profiles() As Object 
     Get 
      Return Me.profilesField 
     End Get 
     Set(value As Object) 
      Me.profilesField = value 
     End Set 
    End Property 

    <System.Xml.Serialization.XmlArrayItemAttribute("Setting", IsNullable:=False)> _ 
    Public Property Settings() As SettingsFileSetting() 
     Get 
      Return Me.settingsField 
     End Get 
     Set(value As SettingsFileSetting()) 
      Me.settingsField = value 
     End Set 
    End Property 

    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property CurrentProfile() As String 
     Get 
      Return Me.currentProfileField 
     End Get 
     Set(value As String) 
      Me.currentProfileField = value 
     End Set 
    End Property 

    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property GeneratedClassNamespace() As String 
     Get 
      Return Me.generatedClassNamespaceField 
     End Get 
     Set(value As String) 
      Me.generatedClassNamespaceField = value 
     End Set 
    End Property 

    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property GeneratedClassName() As String 
     Get 
      Return Me.generatedClassNameField 
     End Get 
     Set(value As String) 
      Me.generatedClassNameField = value 
     End Set 
    End Property 

    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property UseMySettingsClassName() As Boolean 
     Get 
      Return Me.useMySettingsClassNameField 
     End Get 
     Set(value As Boolean) 
      Me.useMySettingsClassNameField = value 
     End Set 
    End Property 
End Class 

<System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="http://schemas.microsoft.com/VisualStudio/2004/01/settings")> _ 
Partial Public Class SettingsFileSetting 

    Private valueField As SettingsFileSettingValue 
    Private nameField As String 
    Private typeField As String 
    Private scopeField As String 

    Public Property Value() As SettingsFileSettingValue 
     Get 
      Return Me.valueField 
     End Get 
     Set(value As SettingsFileSettingValue) 
      Me.valueField = value 
     End Set 
    End Property 

    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Name() As String 
     Get 
      Return Me.nameField 
     End Get 
     Set(value As String) 
      Me.nameField = value 
     End Set 
    End Property 

    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Type() As String 
     Get 
      Return Me.typeField 
     End Get 
     Set(value As String) 
      Me.typeField = value 
     End Set 
    End Property 

    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Scope() As String 
     Get 
      Return Me.scopeField 
     End Get 
     Set(value As String) 
      Me.scopeField = value 
     End Set 
    End Property 
End Class 

<System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="http://schemas.microsoft.com/VisualStudio/2004/01/settings")> _ 
Partial Public Class SettingsFileSettingValue 

    Private profileField As String 
    Private valueField As String 

    <System.Xml.Serialization.XmlAttributeAttribute()> _ 
    Public Property Profile() As String 
     Get 
      Return Me.profileField 
     End Get 
     Set(value As String) 
      Me.profileField = value 
     End Set 
    End Property 

    <System.Xml.Serialization.XmlTextAttribute()> _ 
    Public Property Value() As String 
     Get 
      Return Me.valueField 
     End Get 
     Set(value As String) 
      Me.valueField = value 
     End Set 
    End Property 
End Class 

Mit diesen Klassen können Sie die XML-Einstellungsdatei serialisiert und deserialisiert. Natürlich können Sie in die Einstellungsdatei mit XML-Serialisierung lesen und schreiben.

Diese Komplettlösung zeigt, wie eine Einstellung

' define the path to the settings file 
Dim settingsPath = "C:\Users\username\AppData\Local\Temporary Projects\ConsoleApplication1\My Project\Settings.settings" 
Dim serializer As New XmlSerializer(GetType(SettingsFile)) 

Sub Main() 
    Dim settingsObject As SettingsFile 
    ' open the settings file for reading 
    Using sr As New StreamReader(settingsPath) ' deserialize the xml file to the settings object 
     settingsObject = CType(serializer.Deserialize(sr), SettingsFile) 
    End Using 
    Console.WriteLine("Available settings:") ' display the available settings 
    Console.WriteLine(
     String.Join(Environment.NewLine, settingsObject.Settings.Select(
        Function(s) String.Format("{0}: '{1}'", s.Name, s.Value.Value)))) 
    Console.WriteLine("Enter a setting name to be modified...") 
    Dim settingNameToBeModified = Console.ReadLine() 
    Dim settingToBeModified = 
     settingsObject.Settings. 
     Where(Function(s) s.Name.ToUpper() = settingNameToBeModified.ToUpper()).Single() 
    Console.WriteLine(
     "Enter a new value for {0} (old value: '{1}')", 
     settingToBeModified.Name, settingToBeModified.Value.Value) 
    Dim newValue = Console.ReadLine() 
    If EditSetting(settingToBeModified, newValue) Then 
     Console.WriteLine("Saved new setting!") 
    Else 
     Console.WriteLine("Couldn't find setting '{0}'", settingNameToBeModified) 
    End If 
    Console.WriteLine("Press enter to exit") 
    Console.ReadLine() 
End Sub 

Public Function EditSetting(settingObject As SettingsFileSetting, newValue As String) 
    Try 
     Console.WriteLine(
      "Enter a new value for {0} (old value: '{1}')", 
      settingObject.Name, settingObject.Value.Value) 
     settingObject.Value.Value = newValue 
     Using sr As New StreamWriter(settingsPath) ' open the settings file again, for writing 
      serializer.Serialize(sr, settingObject) ' serialize the settings object to the xml file 
     End Using 
     Console.WriteLine("Saved new setting!") 
    Catch 
     Return False 
    End Try 
End Function 
Verwandte Themen