Hi Zusammen,
Programmiersprache: C++ mit "QT 4.8 Plugin"
Benutzte Tools: Visual Studio 2008
Folgende Problem:
Ich habe eine Application in C++ geschrieben und daraus eine Installer
erstellt.
In dieses Application wird eine Ini File (so zusagen Konfig
Dateien)verwendet.
Es funktioniert fast alles richtig, wenn es nicht eine komische Effekt
auftritt.
Dieses Effekt lässt sich leider nicht produzieren.
Es tritt plötzlich unter gewissen Umständen(Die Umstände sind auch
unbekannt).
Wenn dieses Effekt eintritt, dann werden die Value der Konfig Datein
alle auf 0 gesetzt.
so z.B:
--> in Normalen Fall
StromLimit = 4
JitterMax = 200
ProduktFamilie = H30658N
.....
--> nach dem Effekt
StromLimit = 0
JitterMax = 0
ProduktFamilie = 0
.....
In der SW ist bestimmt einen BUG drin aber was kann das sein?
Könnte es einen Zeiger, der einfach in der Luft liegt und nicht zerstört
nach der Benutzung?
um mal noch was konstruktives nachzuschießen?
Tritt der Fehler auf, wenn du das in deinem VS startest?
Tritt der Fehler nur auf, wenn du das Programm installiert hattest und
separat gestartet hast?
Wo liegt das .ini file im Vergleich zur Exe?
Wenn die .ini im gleichen Verzeichnis der exe liegt. Schreibt dein
Programm dort was rein?
Wenn das nur in deinem installierten Programm passiert, taucht der
FEhler auch auf, wenn du das Prog als Admin startest?
Nur ins Blaue geraten. Die .ini gehört nicht in das Verzeichnis der Exe,
sondern nach %appdata%\unterordner
Debugger verwenden, Breakpoint auf die Stelle setzen, an der die
Konfigurationsdatei von Deinem Programm beschrieben wird, laufen
lassen ...
Und wenns immer die richtigen Werte sind: Breakpoint mit Bedingung
"geschriebener Wert ist null" erweitern.
Laufen lassen ...
nicht"Gast" schrieb:> um mal noch was konstruktives nachzuschießen?>> Tritt der Fehler auf, wenn du das in deinem VS startest?
Nein
> Tritt der Fehler nur auf, wenn du das Programm installiert hattest und> separat gestartet hast?
ja
>> Wo liegt das .ini file im Vergleich zur Exe?
Im gleichen Ordner wo die exe ist
> Wenn die .ini im gleichen Verzeichnis der exe liegt. Schreibt dein> Programm dort was rein?
Ja
>> Wenn das nur in deinem installierten Programm passiert, taucht der> FEhler auch auf, wenn du das Prog als Admin startest?>
Das weiss ich nicht so was habe ich nicht ausprobiert aber was für einen
Rolle soll das spielen?
> Nur ins Blaue geraten. Die .ini gehört nicht in das Verzeichnis der Exe,> sondern nach %appdata%\unterordner
Gerhard_Berlin schrieb:>> Wo liegt das .ini file im Vergleich zur Exe?> Im gleichen Ordner wo die exe ist
Das ist ausdrücklich unerwünscht und überholt, und das seit vielen
vielen Jahren. Nebeneffekte sind unvermeidlich, besonders bei
unterschiedlichen Benutzern.
Man kann natürlich ein INI-File erstellen, das für alle Benutzer gilt,
aber nicht da wo die EXE steht.
Georg
Gerhard_Berlin schrieb:>> Wo liegt das .ini file im Vergleich zur Exe?> Im gleichen Ordner wo die exe ist
gibst du beim bearbeiten der .ini immer den vollständigen Pfad an oder
nur den Dateinamen?
Georg schrieb:> Gerhard_Berlin schrieb:>>> Wo liegt das .ini file im Vergleich zur Exe?>> Im gleichen Ordner wo die exe ist>> Das ist ausdrücklich unerwünscht und überholt, und das seit vielen> vielen Jahren. Nebeneffekte sind unvermeidlich, besonders bei> unterschiedlichen Benutzern.
Das macht QSettings eigentlich nicht: Unter Windows würde es primär in
die Registry schreiben und wenn man die Verwendung von Ini Files
erzwingt, schreibt es je nach gesetztem scope in %APPDATA% oder
%COMMON_APPDATA%, außer man setzt explizit einen anderen Pfad. Aber wie
Georg es erklärt hat, ist das keine gute Idee.
Vielleicht weil der Admin Files im Programm Verzeichnis schreiben darf?
Alle normalen User Schreibzugriffe werden umgeleitet in das
Behelfsverzeichnis...irgendwas mit Roaming...
Lies die Guidelines von MS, die gelten schon seit Windows 95 oder noch
eher. So eine schlampige Programmierung mit ini Files im
Programmverzeichnis ist schon immer verboten.
Noch wissen wir ja gar nicht, wo die hier verwendete *.exe liegt - wenn
sie außerhalb von "c:\programme" bzw. "c:\programme (x86)" liegt, dann
ist das zwar auch Murks, aber sorgt dafür, daß der schreibende
Dateizugriff an den Speicherort der *.exe-Datei funktioniert.
Was zu tun ist, habe ich weiter oben schon beschrieben.
Beitrag "Re: Benutzung von ini.File in eine C++ Application"
Rufus Τ. F. schrieb:> Noch wissen wir ja gar nicht, wo die hier verwendete *.exe liegt
Doch, hat er beantwortet - genau dort wo sie nicht hingehört.
Georg
Danke an alle, die sich an die Diskussion kontruktiv teilgenommen haben.
Für mich bedeutet es viel Aufwand aber na ja es muss gemacht werden.
Man lernt nie aus... danke auch für die Hinweise. Sie sind echt
Hilfsreich..