Forum: PC-Programmierung Benutzung von ini.File in eine C++ Application


von Gerhard_Berlin (Gast)


Lesenswert?

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?

: Verschoben durch User
von nicht"Gast" (Gast)


Lesenswert?

Der Fehler liegt in Zeile 42.

Was soll das? Das hier ist kein Ratespiel Forum. Kannst du nicht ein 
wenig Code rüberwachsen lassen?

von nicht"Gast" (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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 ...

von Gerhard_Berlin (Gast)


Lesenswert?

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

von physiker (Gast)


Lesenswert?

Verwendest Du QTSettings?

von Daniel A. (daniel-a)


Lesenswert?

Gerhard_Berlin schrieb:
>> 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?

https://www.pcspinnt.de/2009/11/virtualstore-unter-windows-vista-und-windows-7/

von nicht"Gast" (Gast)


Lesenswert?


von Georg (Gast)


Lesenswert?

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

von Gerhard_Berlin (Gast)


Lesenswert?

physiker schrieb:
> Verwendest Du QTSettings?

Ja

von Irgendwer (Gast)


Lesenswert?

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?

von Gerhard_Berlin (Gast)


Lesenswert?

Irgendwer schrieb:
> gibst du beim bearbeiten der .ini immer den vollständigen Pfad an oder
> nur den Dateinamen?

Ich gebe eigentlich nur der Dateiname

von Gero (Gast)


Lesenswert?

Dann wäre Das jetzt der Moment, an dem Du etwas Quellcode zu Tisch 
reichst....

von Gerhard_Berlin (Gast)


Lesenswert?

Aber warum tritt dieses Effekt selten auf?
Alles hat mit Adminrechte zu tun?

von physiker (Gast)


Lesenswert?

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.

von Christian R. (supachris)


Lesenswert?

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.

von Dumdi D. (dumdidum)


Lesenswert?

Christian R. schrieb:
> Lies die Guidelines von MS,

Gibt es da einen Link/Referenz?

von physiker (Gast)


Lesenswert?

Dumdi D. schrieb:
> Christian R. schrieb:
>> Lies die Guidelines von MS,
>
> Gibt es da einen Link/Referenz?


https://msdn.microsoft.com/library/windows/desktop/dn688964.aspx

https://msdn.microsoft.com/en-us/windows/uwp/app-settings/guidelines-for-app-settings

Ich würde mich da aber einfach auf die Qt Standardeinstellungen 
verlassen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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"

von Georg (Gast)


Lesenswert?

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

von Gerhard_Berlin (Gast)


Lesenswert?

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..

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Georg schrieb:
> Doch, hat er beantwortet - genau dort wo sie nicht hingehört.

Wo bitte soll das beantwortet worden sein?

von physiker (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Wo bitte soll das beantwortet worden sein?

Gerhard_Berlin schrieb:
>> Wo liegt das .ini file im Vergleich zur Exe?
> Im gleichen Ordner wo die exe ist

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ja, und?! Was sagt das darüber aus, wo die exe ist?

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
Noch kein Account? Hier anmelden.