Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mi 03.06.15 19:01 
Hallo,
ich möchte einige Eigenschaften zu meiner Anwendung in der exe speichern.
Hierzu habe ich unter anderem eine Eigenschaft angelegt "FIRSTSTART", dich ich im Compiler auf TRUE gesetzt habe.

Während der Laufzeit prüft er, ob es der erste Start ist und wenn ja zeigt er das Fenster an um sich mit der Datenbank zu connecten.
Wenn diese Einstellungen stimmen, soll den Eigenschaftswert verändern und einen Restart machen.

Leider zeigt er nach dem Restart trotzdem an, dass es der erste Start wäre.
Wenn ich den Restart auskommentieren und mir eine msgbox mit dem Eigenschaftswert anzeigen lasse, sehe ich dass er die Eigenschaft auf False geändert hat.

Leider verstehe ich nicht, warum er diese Einstellung nach dem Neustart verliert.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
                    Properties.Settings.Default.MySqlSettingsSet = true;
                    MsgAusgabe.ShowInformation("Die Anwendung wird nun neu gestartet.");

                    MsgAusgabe.ShowError(Properties.Settings.Default.FirstStart.ToString());
                    //Application.Restart();


Über eine Idee wäre ich dankbar.

Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 03.06.15 19:15 
Du solltest auch Save() aufrufen.
Je nachdem in welchem Context du gerade bist wird das aber auch nicht funktionieren.
Ist das eine userabhängige Einstellung oder global bzw. systemweit gedacht?

Und nebenbei das wird natürlich nicht in der Exe gespeichert sondern in den Dokumenten des aktuellen Users bzw. in der neben der Exe liegenden App.config.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Mi 03.06.15 20:09 
Hallo Ralf,
ich dachte an eine Anwendungsbezogene Einstellung, damit beim ersten Start dieser Anwendung auf diesem Rechner, das Einstellungsfenster zur Datenbank angezeigt wird.
Diese brauch nicht pro User angezeigt werden?!

Ich habe es gerade mal getestet und funktioniert für mich.
Unter welchen Bedingungen kann ich dort den nicht speichern?

Dachte, dass liegt in der exe. Danke für die Erklärung.
VG
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 03.06.15 20:26 
Wenn das so funktioniert wenn du Save aufrufst dann ist das eine userbezogene Einstellung. Anwendungsbezogene Einstellungen liegen in der App.config neben der Exe Datei und sind dafür gedacht direkt von einem Admin geändert zu werden und nicht von der Anwendung. Wäre die gezeigte MySqlSettingsSet Setting Anwendungsbeszogen wäre die auch ReadOnly (die Property hätte keinen Setter) und das würde nicht kompilieren.

Wenn du die App.config zur Laufzeit ändern willst mußt du das an der Settings Klasse vorbei direkt über den ConfigurationManager machen.

ausblenden C#-Quelltext
1:
2:
3:
System.Configuration.Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
cfg.AppSettings.Settings["MySqlSettingsSet "].Value = true;     
cfg.Save(ConfigurationSaveMode.Modified);


Lesen kannst du weiterhin über die Settings Klasse.
Aber so etwas wie erster Start wäre für mich User bezogen. Jeder User startet doch selbst die Anwendung für sich zum ersten Mal?


Edit: Bei einem solchen Code musst du dann übrigens beim debuggen aufpassen. Deine Anwendung läuft ja dann standardmäßig im Context der vshost.exe und du würdest dann die vshost.exe.config ändern und nicht die App.config deiner Anwendung.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Do 04.06.15 11:28 
Guten Morgen ,
also irgendwie habe ich mir wenigstens diesen Teil einfacher vorgestellt.
Also bisher waren es Userbezogene Einstellungen und mit dem Save hatte geklappt.

Nun habe ich aber das Problem, dass er zur Laufzeit dort was einträgt und diese Einstellungen auch nach dem NeuKomplilieren nicht mit dem Default überschreibt, die ich in den Settings gesetzt habe.
Dachte, dass dies dann beim NeuKomplieren auch immer auf Default zurück gesetzt wird?!

IN dem DebugOrdner finde ich auch gar keine App.Config.

Würde mich noch mal über Unterstützung freuen.

Danke

VG

EDIT: Oder verstehe ich es falsch und ich muss es auf Anwendungsbezogen umstellen?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 04.06.15 12:40 
Zitat:
Nun habe ich aber das Problem, dass er zur Laufzeit dort was einträgt und diese Einstellungen auch nach dem NeuKomplilieren nicht mit dem Default überschreibt, die ich in den Settings gesetzt habe.
Dachte, dass dies dann beim NeuKomplieren auch immer auf Default zurück gesetzt wird?!


Denk da nochmal genau drüber nach. Du möchtest das auch schon durch reines Neukompilieren alle Einstellungen weg sind? Stell dir vor du hast Benutzer im Millionenbereich denen du so Hotfixes, Patches oder neue Versionen unterschiebst. Besser du bringst nirgendwo in der Software eine Kontaktadresse unter ;)

Zitat:
In dem DebugOrdner finde ich auch gar keine App.Config.


Das wären auch die Applikationseinstellungen, die man wie gesagt, so ohne weiteres aus der Executable nicht ändern kann. Eben wie im vorhergehenden Post beschrieben und dann auch nur mit Adminrechten. Programme sind ja üblicherweise an einem Ort installiert wo nur Admins Schreibrechte haben und nicht jeder belibiege User. Das System will nicht das ein x-belibieger User A Einstellungen von oder für User B ändern kann. Die User Einstellungen liegen im Userverzeichnis des entsprechenden Users (Üblichweise C:\Users\UserName\AppData\Local\ApplikationsName\ApplikationsVersion).

Wenn du nicht willst das die Usereinstellungen ziehen musst du zumindest die Versionsnummer deiner Anwendung ändern (oder die Signatur, den Namen etc.). Übrigens das die Einstellungen dann nicht mehr ziehen, (weil im Pfad zu den Einstellungen eine Versionsidentifier drinsteckt) wenn sich die Versionsnummer ändert halte ich für einen Fehler von Microsoft. Für dein Vorhaben scheint das aber gerade zu passen.

Zitat:
EDIT: Oder verstehe ich es falsch und ich muss es auf Anwendungsbezogen umstellen?


Woher sollen wir das Wissen :gruebel: Du weißt ob du das Applikationsabhängig oder Userabhängigig sein soll. Wenn du mich im allgemeine fragst bezüglich eines ersten Starts einer Anwendung dann würde ich sagen ist das eher was inividuelles.
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Fr 05.06.15 08:39 
Hallo Ralf,
irgendwie komme ich mit deinen Antworten nicht mit und statt ich von mal zu mal mehr verstehe ist es gerade irgendwie weniger :-(
Was meinst du mit Kontaktadressen in der Software?

Hier stellt sich mir auch gerade die Frage, was diese Settings mit den Hotfixes etc. zu tun haben :-(
Sorry, wenn ich so doof nachhacke, versuche es nur anständig zu verstehen.

Danke, für deine Zeit, die du opferst.

VG

EDIT:
Mir fällt da gerade noch was ein.
Wie kann ich den Daten, die weder in der DB liegen sollen noch Editierbar in einer config sein sollen , speichern.
Frage mich gerade wie diese Trials zum Beispiel gebaut sind, wo liegen die Daten, dass die Sofwtare weiß sie ist eine oder nicht.
Trial an sich brauche ich nicht, aber es gibt ja immer mal solche Daten.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 05.06.15 10:29 
Ich wollte damit darauf hinweisen das eine Software die durch so eine Lapalie wie neukompilieren ihre Einstellungen nicht mehr benutzt sondern auf irgendwelche Defaults zurückfällt Unsinn ist und erhebliches missfallen beim Benutzer auslösen würde. Stell dir vor Visual Studio würde das machen. Jede Woche bekommst du im Hintergrund irgendwelche Updates für VS und begrüßt dich danach dann mit seinen Werkseinstellungen. Das Settings Feature ist natürlich für den Normalfall gedacht und normal ist das Einstellungen wesentlich länger halten sollen als das Kompilat einer Anwendung.

Zitat:
Frage mich gerade wie diese Trials zum Beispiel gebaut sind, wo liegen die Daten, dass die Sofwtare weiß sie ist eine oder nicht.


Trial ist ein anderes Kompilat mit eingeschränkten Features, oder die Schlüsselinformationen liegen verschlüsselt irgendwo (z.B. Registry) oder bei einer Online Aktivierung bekommst du für deinen Key und diesen Rechner eine speziell Live erstelltes Kompilat das nur auf diesem Rechner läuft oder die Anwendung macht bei jedem Start ein Phone Home und checkt dabei ob die Anwendung irgendwie berechtigt ist oder oder oder ....
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Sa 06.06.15 11:30 
Danke