Umgebungsvariablen mit Qt setzen (lesen?)

Alles rund um die Programmierung mit Qt
Antworten
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Umgebungsvariablen mit Qt setzen (lesen?)

Beitrag von ArneStocker »

Hallo liebe Leser(innen)

kann mir jemand sagen, wie man die Umgebungsvariablen eines Betriebssystems (z.B: Path o.ä.) mit Qt - Mitteln setzen (und ggf. auch lesen) kann.

Ich tue mich da ein bischen schwer. In der Klasse QSettings habe ich zwar Methoden gefunden, wie Software Einträge in der Registry gesetzt und gelesen werden können, auf die ebenfalls dort vorhandenen Umgebungsvariablen kann ich leider nicht zugreifen

Danke für die Mühe
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dazu braucht man kein Qt --> getenv()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

Danke, das hatte ich nicht gefunden

Allerdings wollte ich die Umgebungsvariablen primär setzen, soll heißen unter Windows (das Pendant unter Linux ist wohl auch PATH) die Variable PATH um einen Hinweis auf meinen Programmpfad ergänzen (Die entsprechenden Rechte des Anwenders vorausgesetzt).

Eine Funktion setenv() gibt es wohl nicht. Ausserdem will ich den Inhalt ja nicht löschen, sondern nur um eine weiteres Verzeichnis ergänzen. Also sinngemäß (wenn es setenv(key,value) gäbe:

setenv("PATH",QString(getenv("PATH") + ";" + addPath);

Danke, Arne
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

setenv gibt es auch, allerdnigs nicht unter Windows. als Ersatz würde ich putenv nehmen. Schau z.B. hier: http://www.hmug.org/man/3/getenv.html (oder unter Linux 'man 3 getenv') :)
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

Das hat mit putenv() auch unter Windows geklappt, leider nur für die Laufzeit meines Programmes, d.h. nach Beendigung ist wieder alles wie vorher.

Den Hickhack hatte ich unter Linux auch schon, wo es mir in der Shell nicht gelungen ist, dauerhaft eine Pfadvariable zu setzen.

Hintergrund : Ich möchte für mein Programm mein eigenes Installationsprogramm schreiben, welches dann den Installationspfad in die PATH Umgebung aufnimmt. In der Doku habe ich auch nichts gefunden, ausser dass VisualC++ mit einer Batch Datei arbeitet um den Installationspfad auf sich selbst zu setzen.

Hast Du da eine Idee

Ich habe mich auch schon von dem Gedanken verabschiedet, hier für Windows und Linux eine einheitliche Lösung zu finden und werde wohl mit einem Compilerschalter arbeiten müssen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Da der Path in Windows und Unix anders gespichert wrid, wirst Du da wohl nicht umhinkommen und 2 verschiedene Routinen schreiben müssen.
In Windows ist der Pfad für den User unter "HKCU\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" gespeichert (Da kommt man mit QSettings glaube ich nicht hin). Unter Unix ist es irgendwo gespeichert (profile.local, ~/.profile, ...)
Allerdings vertstehe ich nicht ganz wieso du PATH setzen musst... unter Win erstelle ich ein Symbol auf das ich klicken, unter Unix mache ich eine Link von /usr/local/bin/MeinProgram auf die ausführbare Datei, woimmer sie auch sein mag...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

>> ... wieso Du PATH setzen musst ...

... weil das Programm die cppuhelper.dll von Open Office bzw. von Star Office benötigt und die sich im Verzeichnispfad von OpenOffice befindet. Diese DLL ebenfalls in meinen Pfad zu kopieren und dann mit einer weiteren (möglicherweise nicht identischen Kopie) zu arbeiten, halte ich für gefährlich.

Der Installationspfad von Open Office lässt sich übrigens mit QSettings brav auslesen.

Mir graust's davor, mich durch die Windows API fummeln zu müssen um auf die Registry - Einträge in HKEYCURRENTUSER .. irgendwas ... zuzugreifen. Aber irgendwie müssen das andere Installationsroutinen doch auch erledigen.

Gruss Arne
Antworten