Hallo, inzwischen habe ich gelernt, wie man unter Visual Basic Einstellungen, die man beim nächsten Start eines Programms benötigt, z.B. Größe und Lage des Programmfensters auf dem Bildschirm, speichert: Dazu bietet Visual Studio 2015 (ich nutze davon ausschließlich Visual Basic) die so genannten Settings an und das klappt auch prima. In älteren Versionen des Programms wurden die zu sichernden Daten in die Windows Registry eingetragen. Dort konnte man sie ggf. auch manuell editieren und sogar komplett löschen (REGEDIT => HKEY_CURRENT_USER\Software). Bisher dachte ich, bei den jetzt verwendeten Settings handele es sich um einen (variablen) Speicherbereich innerhalb des Programmcodes, so dass dieser beim Übertragen des fertig compilierten Programms auf einen anderen Computer einfach mitgenommen wird. Wie ich aber nun festgestellt habe, scheint das nicht der Fall zu sein. Vielmehr benimmt sich der neue PC so als kenne er die Einträge gar nicht. Und das Schlimmste: Einmal initialisiert, sind die Settings immer da! Man kann sie vielleicht per Programm auf Null setzen - aber eben nicht ungeschehen machen. Mangels weiterer PCs kann ich keine weiteren Simulationen ohne Settings durchführen. Das wäre aber wichtig bevor ich das Programm fürs Update an bereits gelieferten Anlagen heraus gebe. Ich wüsste also gerne, wo die Settings in meinem eigenen Arbeits-PC abgelegt sind und wie ich sie komplett löschen kann. Kann mir jemand von Euch sagen, wo ich diese Einträge finde? Viele Grüße Norbert
Kenne VB / VB.NET da nicht, aber neben der Registry sind die üblichen Speicherpfade (bei aktuellen windows-versionen): C:\Users\{windowsbenutzername}\AppData\ - für benutzerspezfische Einstellungen/Daten C:\ProgramData\ - für Rechner-globale Programmeinstellungen Die konkreten Speicherpfade kann man für bestimmte Windows-Versionen leicht googlen - siehe auch: https://msdn.microsoft.com/de-de/library/windows/desktop/dd378457.aspx In eigenen Programmen sollte man entsprechend für Settings vorgesehne APIs nutzen, niemals die Pfade hardkodieren. Für bestimmte Zwecke gibt es auch eigene vorgesehene Pfade. Die konkreten Pfade können auch über SHGetKnownFolderPath() oder entsprechende Umgebungsvariablen ermittelt werden. (In .NET-Anwendungen: Environment.GetFolderPath())
Norbert G. schrieb: > Mangels weiterer PCs kann ich keine weiteren Simulationen ohne Settings > durchführen. VM? > Ich wüsste also gerne, wo die Settings in meinem eigenen Arbeits-PC > abgelegt sind Die Application-Settings befinden sich in der *.exe.config, die User-Settings irgendwo in einem tieferen Unterverzeichnis unter %AppData%, glaube ich (aber unter einem Hash, der sich von Installation zu Installation unterscheiden kann). > Kann mir jemand von Euch sagen, wo ich diese Einträge finde? Probiere mal das hier:
1 | Dim config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal) |
2 | MessageBox.Show(config.FilePath) |
Hallo, danke für Eure spontanen Tipps! Ich habe lange herum probiert, aber es hat mir nur wenig geholfen. In der ellenlangen Liste, die mir Bluppdidupp genannt hatte, wird ein typischer Windows-Ordner, der vom Namen her irgendetwas mit den Settings zu tun haben könnte, gar nicht erwähnt. Den Configurationmanager von Hubert kennt der VB-Compiler nicht, auch nicht, wenn ich ihn als Member von me oder my.computer angebe. Die Datei (projektname).exe.config (auch von Hubert) gibt es tatsächlich - sie steht im VB-Projektverzeichnuns unter (Projektname)\Bin\Debug - also immerhin im Ausgabeverzeichnis, aber dabei handelt es sich offenbar dennoch nur um die Entwurfsversion. Denn hier sind nur die Namen der Variablen und ggf. deren numerischen Default-Werte eingetragen, nicht aber die letzten beim Schließen des Programms tatsächlich entstandenen aktuellen Werte (wozu auch ein String gehört, nämlich eine 8stellige alphanumerische Seriennummer; dieser String ist in der Datei leer). Exakt die gleiche Datei findet sich auch im Projekt-Hauptverzeichnis, dort jedoch unter dem Namen app.config. Eine 10-minütige maschinelle Suche im Verzeichnis C:\Benutzer\Norbert nach irgendeiner Datei, die einen der Variablennamen aus den Settings enthält, brachte ebenfalls nichts. Immerhin fand ich schließlich im Hauptverzeichnis der Festplatte einen Ordner namens C:\Documents and Settings. Direkt darunter auch eine deutsche Version namens C:\Dokumente und Einstellungen. Da könnten die Settings drin stecken. Aber dummerweise sind die beiden Verzeichnisse gegen meinen Zugriff geschützt und ich fand auch in der "erweiterten Freigabe" keinerlei Möglichkeit, das zu ändern. Mir bleibt also nur die Möglichkeit, für den Fall, dass die neu auf anderen Computern installierten Programm-Kopien keine Settings finden, passende Defaultwerte vorzusehen und dabei zu hoffen, dass schon alles gut gehen wird... Viele Grüße Norbert
Norbert G. schrieb: > Den Configurationmanager von Hubert kennt der VB-Compiler nicht, auch > nicht, wenn ich ihn als Member von me oder my.computer angebe. Hmm ... müsste eigentlich vorhanden sein; diese Klasse gibt es schon seit .NET 2.0: https://msdn.microsoft.com/de-de/library/system.configuration.configurationmanager(v=vs.110).aspx Hast du System.Configuration bei den Referenzen in dein Projekt eingebunden? Ich sehe gerade, dass das entgegen meiner Annahme nicht automatisch bei der Projekterstellung passiert (zumindest nicht bei allen .NET-Projekttypen). Zusätzlich noch
1 | Imports System.Configuration |
oben in die Quelldatei setzen, in der du ConfigurationManager benutzt (ohne Gewähr; ich habe noch nie VB verwendet, nur ab und zu C#).
Ich habe es mal ausprobiert: Die Datei (user.config) befindet sich im angezeigten Ordner, sobald die Settings gespeichert wurden.
1 | <?xml version="1.0" encoding="utf-8"?>
|
2 | <configuration>
|
3 | <userSettings>
|
4 | <WindowsApp1.My.MySettings>
|
5 | <setting name="Test" serializeAs="String"> |
6 | <value>Tralala</value> |
7 | </setting>
|
8 | </WindowsApp1.My.MySettings>
|
9 | </userSettings>
|
10 | </configuration>
|
Hallo Hubert, vielen Dank für Deine Ergänzung! Ich habe das sofort versucht, bin aber nicht weiter gekommen. Beim Eintragen der Imports-Anweisung wird der Name "System.Configuration" nur hellgrau dargestellt und die mit dem Cursor verbundene Sprechblase sagt "Imports Statement is unnecessary". Offenbar ist es bereits stillschweigend vorhanden. Dementsprechend ändert sich auch nichts bei der Eingabe der Dim-Anweisung (die ich gleich als eine der ersten in der Sub Form1_Load angegeben hatte); der Compiler kennt die Variable "ConfigurationManager" nicht. Ich gebs jetzt auf; sollen die Settings meinetwegen bleiben wo sie sind - trotzdem danke für Deine Geduld! Viele Grüße Norbert
Hallo Hubert, unsere Mails haben sich gekreuzt. Dank Deines erneuten Tipps habe ich jetzt doch eine heiße Spur gefunden! Es handelt sich zwar noch nicht um die Settings aus der aktuellen Version meines Programms, aber immerhin bin ich auf 3 "Leichen" aus meinen ersten Gehversuchen mit diesen Settings gestoßen. Das Verzeichnis lautet ganz ähnlich wie bei Dir, nämlich C:\Users\Norbert\AppData\Local\WindowsApplication3\WA3_USB_mit_FT232_Ver weis_Url_fsr0fa53z1d0qhbdehmij005yrjlkw0g\1.0.0.0 Und genau da drin findet sich eine Datei namens user.config. Jetzt muss ich nur noch heraus finden, wo unter den zahllosen Einträgen unter ...\AppData\Local mein aktuelles Programm die Settings speichert (ich hatte irgendwann und irgendwo die Bezeichnung "Windows Application3" geändert...) - diese Aufgabe sollte lösbar sein! Danke! Norbert
@Hubert: Datei gefunden! Hier steht sie: C:\Users\Norbert\AppData\Local\Microsoft\T53S_V115.vshost.exe_Url_w5s0dm xkkmxy2r24vaxzmgvk55ezjgwm\1.0.0.0 Entscheidend war Dein Hinweis, dass die Datei mit den Settings einfach nur "user.config" heißt. Nur mit dieser Information war in dem irren Wust von Dateien (ich glaube, das sind bei mir mehrere Tausend) wenigstens eine maschinelle Suche möglich. Nochmal Danke! Norbert
Schön, dass es doch noch geklappt hat! > C:\Users\Norbert\AppData\Local\Microsoft\T53S_V115.vshost.exe_Url_w5s0dm > xkkmxy2r24vaxzmgvk55ezjgwm\1.0.0.0 Ja, das ist bei verschiedenen Windows-Versionen unterschiedlich. Bei mir stehen z.B. unter C:\Users\<Name>\AppData\Local\Microsoft\ nur Daten von Microsoft-Software (VS, Office etc.) und die eigenen direkt in C:\Users\<Name>\AppData\<Programmname>\ Das Problem mit dem von mir geposteten Code ist vermutlich aufgetreten, weil du den ersten Schritt (das Hinzufügen von System.Configuration zu den Referenzen) ausgelassen hast. BTW: Wenn man öfter so etwas macht, ist eine virtuelle Maschine ganz nützlich; die kann man einfach vor einem neuen Test zurücksetzen, ohne darüber nachdenken zu müssen, was an der Konfiguration geändert wurde oder welche Runtimes auf dem Entwicklungsrechner vorhanden sind, auf anderen aber vielleicht nicht (mal ganz abgesehen von verschiedenen Versionen des Betriebssystems).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.