Seite 1 von 1

Umgebungsvariablen speichern[ERLEDIGT]

Verfasst: Mo, 03. Sep 2012 19:46
von Muecke
Hallo


Ist es möglich einen Wert anzuhängen in der Systemvariablen ohne ein Installationsprogramm auszuführen?
Alaska macht dies ja auch, aber eben mit einem Install Programm.

Gruss Thomas

Re: Umgebungsvariablen speichern

Verfasst: Mo, 03. Sep 2012 21:05
von georg
Hallo,


Du könntest es mit Thomas Braun's Registry Class versuchen. Da es die Umgebungsvariablen auf User-Ebene gibt (\HKEY_CURRENT_USER\ENVIRONMENT) sowie auf Rechner-Ebene (\HKEY_LOCAL_MACHINE\CurrentcontrolSet\Control\Session Manager\Environment) solltest Du überlegen, welche Du anpassen willst.

Dann den alten Wert einlesen, ändern, und zurückschreiben. Das sollte es gewesen sein.


Gruss,

Georg

Re: Umgebungsvariablen speichern

Verfasst: Di, 04. Sep 2012 13:03
von Muecke
Georg

Geht leider nicht, keine schreibzugriffe( XbpReg:SetValue )


Gruss Thomas

Re: Umgebungsvariablen speichern

Verfasst: Di, 04. Sep 2012 13:24
von georg
Hallo, Thomas -


Du schreibst zu wenig über das Umfeld. Wenn Dein Programm eine solche Zuweisung braucht, geht es eventuell über eine Batch-Datei, die dann auch Dein Programm startet:

Code: Alles auswählen

set PATH=%PATH%;c:\irgendwo
set MEINE_OPTION=ON
xbase-pgm.exe
exit

Gruss,

Georg

Re: Umgebungsvariablen speichern

Verfasst: Di, 04. Sep 2012 13:43
von Muecke
Nein es geht darum, dass ich nicht bei jedem Kunden auf den PC zugreifen muss,
um Systemvariablen zu erfassen.
Kann ich dies vielleicht auch mit einem Batch erledigen?

Gruss Thomas

Re: Umgebungsvariablen speichern

Verfasst: Di, 04. Sep 2012 13:56
von brandelh
WAS genau verstehst du unter SYSTEMVARIABLEN ?
Wenn es nur um die aus der CMD geht, kann man diese komplett in eine Datei schreiben und einlesen:

Code: Alles auswählen

CMD-BOX: SET > TEXT.TXT 
das kann man mit runshell erledigen.
Wenn du z.B. den PATH abfragen willst, das geht auch direkt:

Code: Alles auswählen

cPath := Getenv("PATH")

Re: Umgebungsvariablen speichern

Verfasst: Di, 04. Sep 2012 15:30
von Muecke
Hallo Hubert

Ich muss in das Feld -> Variable = Doku schreiben( Name Umgebungsvariable)
Feld -> Wert = d:\dha schreiben(Wert Umgebungsvariable)

Mit Setenv kann ich ja den Wert verändern, aber wie erstelle ich eine neue Umgebungsvariable????

Gruss Thomas

Re: Umgebungsvariablen speichern

Verfasst: Di, 04. Sep 2012 15:35
von georg
Hallo, Thomas -


was genau willst Du machen?

Beispiel: Aufruf einer Batch-Datei, die etwas druckt.

Code: Alles auswählen

nHandle := fCreate("runme.bat")
if nHandle > 0
  cLine := "SET DOKU=C:\HA" + CRLF
  fWrite(nHandle, cLine, Len(cLine))
  cLine := "RR reportxyz.rpx" + CRLF
  fWrite(nHandle, cLine, Len(cLine))
  cLine := "EXIT"
  fWrite(nHandle, cLine, Len(cLine))
  fClose(nHandle)
  RunShell(...)
else
  ConfirmBox()
endif
Eine Umgebungsvariabel definierst Du in der Eingabeaufforderung (oder in einer Batch-Datei) durch SET wert=, danach ist diese Variable in DEM PROZESS, IN DEM SIE DEFINIERT WURDE! sichtbar. Schliesst Du die Eingabeaufforderung oder endet die Batchdatei, ist die Variable auch weg.


Gruss,

Georg

Re: Umgebungsvariablen speichern

Verfasst: Di, 04. Sep 2012 15:47
von Tom
aber wie erstelle ich eine neue Umgebungsvariable????
Auch mit SetEnv():

Code: Alles auswählen

SetEnv('Meins','Isses')
? GetEnv('Meins') // 'Isses'
Allerdings ist das mit Vorsicht zu behandeln; der Kommandoprozessor von Windows 7 beispielsweise holt sich immer wieder sein eigenes Environment (das man aber auch verändern kann - Registry). Dort würde man "Meins" also nicht finden.

Re: Umgebungsvariablen speichern

Verfasst: Di, 04. Sep 2012 15:48
von brandelh
Muecke hat geschrieben:Mit Setenv kann ich ja den Wert verändern, aber wie erstelle ich eine neue Umgebungsvariable????
laut Doku ist das möglich, solange die Abfrage aus diesem Prozess heraus gestartet wird:
Handbuch hat geschrieben:Die Funktion Setenv() wird verwendet, um Umgebungsvariablen des Betriebssystems für den aktiven Prozeß neu zu definieren oder den Inhalt bestehender Umgebungsvariablen zu ändern. Diese Änderungen gelten nicht für andere Prozesse, d.h. geänderte Umgebungsvariablen sind nur für das Xbase++ Programm sichtbar, das Setenv() ausführt. Falls ein neuer Prozeß mittels RunShell() gestartet wird, erbt er die Umgebungsvariablen des aktiven Prozesses. Setenv() ist also geeignet, die Umgebungsvariablen für einen neu gestarteten Prozeß zu definieren.

Re: Umgebungsvariablen speichern

Verfasst: Di, 04. Sep 2012 16:01
von Muecke
Ich versuche dies mal anders zu formulieren

ich bekomme von einem anbieter eine xml datei die ich auf dem pc einfügen muss.
der hersteller gibt mir aber vor, wie die variable heissen muss z.b. KASSE_CONFIG.
so nun muss ich bei jedem kunden eine neue variable erfassen die KASSE_CONFIG heisst mit
dem wert "d:\dha\config.xml
der anbieter braucht dies um gewisse configurationen für seine schnittstelle auszulesen.

Gruss Thomas

Re: Umgebungsvariablen speichern

Verfasst: Di, 04. Sep 2012 16:26
von brandelh
Dazu brauchst du Schreibrechte auf die Registriy !
Bei Pablo und hier irgendwo auch gibt es ein Beispiel, wie ein Programm sich Admin-Rechte besorgen kann (natürlich muss der Anwender die Kennwörter eingeben).
Bei deinem PC kannst du das für alle User eintragen und nachsehen wo der Inhalt gelandet ist.

ODER du erstellst mit regedit eine Registrierungsdatei mit genau diesem Eintrag.
Ein doppelklick installiert dann den Inhalt (nach Eingabe von Admin Kennwort).

Re: Umgebungsvariablen speichern

Verfasst: Di, 04. Sep 2012 16:30
von Muecke
Hubert

dan war ich doch richtig mit der reg klasse.
ich denke ich mache mir ein batch und gebe dies jedem kunde zum installieren.

besten dank.

gruss thomas

Re: Umgebungsvariablen speichern[ERLEDIGT]

Verfasst: Di, 04. Sep 2012 16:36
von brandelh
Ich habe mir hier eben mal schnell eine SYSTEMVARIABLE MySystem erstellt und mit Inhalt gefüllt.
Regedit meldet diese genau hier:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Ob man nun einfach nur "CurrentControlSet" setzen muss um eines der Controllsets zu ändern, weiß ich nicht.
Ausprobieren hilft bestimmt ;-)

Re: Umgebungsvariablen speichern[ERLEDIGT]

Verfasst: Di, 04. Sep 2012 16:48
von Tom
Environmentvariablen stehen ab Windows XP in HKEY_CURRENT_USER\Environment. Dort findet man zum Beispiel die LIB-Settings der Alaska-Installation. Für HKEY_CURRENT_USER sollte eigentlich immer Schreibrechte existieren, sonst wäre diese Gruppe nämlich sinnlos. Was ich dort setze, kann ich auch über GetEnv() abholen.

Re: Umgebungsvariablen speichern[ERLEDIGT]

Verfasst: Di, 04. Sep 2012 17:22
von brandelh
Wenn das Programm aber für alle User einen Eintrag haben soll, muss es unter System ;-)

Re: Umgebungsvariablen speichern[ERLEDIGT]

Verfasst: Di, 04. Sep 2012 17:32
von Muecke
ich habe auch noch ein

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Session Manager\Environment

bei allen steht das gleiche drin !!!???

Gruss Thomas

Re: Umgebungsvariablen speichern[ERLEDIGT]

Verfasst: Di, 04. Sep 2012 17:36
von georg
Hallo,


seht Euch bitte den zweiten Eintrag in diesem Thread an ...

CurrentControlSet ist das aktive ControlSet, die anderen sind (ältere) Kopien.

Eintragungen unter HKEY_CURRENT_USER gelten nur für den gerade angemeldeten Benutzer. Werden die Änderungen für diesen Benutzer vorgenommen, gelten sie nicht, wenn sich ein anderer am gleichen PC anmeldet, daher sollte man in diesem Fall auf die Einträge unter HKEY_LOCAL_MACHINE zuürckgreifen, denn die gelten dann für alle Benutzer.

Es kommt sonst vor, dass es bei dem einen Benutzer funktioniert und dem anderen nicht, und man sich einen Wolf sucht, wo denn wohl der Unterschied ist.


Gruss,

Georg

Re: Umgebungsvariablen speichern[ERLEDIGT]

Verfasst: Di, 04. Sep 2012 17:43
von Tom
Hallo, Georg.

Thomas will relative Pfade und Dateinamen speichern, das macht für die lokale Maschine nicht sehr viel Sinn. Möglich, dass alles im Glücksfall mit den Benutzereinstellungen übereinstimmt, aber keineswegs sicher.

Re: Umgebungsvariablen speichern[ERLEDIGT]

Verfasst: Mi, 05. Sep 2012 8:30
von brandelh
Tom hat geschrieben:Hallo, Georg.

Thomas will relative Pfade und Dateinamen speichern, das macht für die lokale Maschine nicht sehr viel Sinn. Möglich, dass alles im Glücksfall mit den Benutzereinstellungen übereinstimmt, aber keineswegs sicher.
wieso relative Pfade ?
Oben steht dies:
Muecke hat geschrieben:Ich muss in das Feld -> Variable = Doku schreiben( Name Umgebungsvariable)
Feld -> Wert = d:\dha schreiben(Wert Umgebungsvariable)
d:\dha ist nicht relativ ;-)