Umgebungsvariable und DOS-Shell
Moderators: Hacker, Stefan2, white
Umgebungsvariable und DOS-Shell
Ich habe ein interessantes Phänomen beobachtet:
Ich arbeite mit Umgebungsvariablen, die ich auch häufig wechseln muss. Diese setze ich in der bekannten Weise über die Systemeigenschaften.
Üblicherweise öffne ich mir eine DOS-Box über einen Button im TC ("C:\WINNT\system32\cmd.exe", keine Parameter) und arbeite dann in dieser Shell. Wenn ich mir nun über "Set" meine Systemvariablen ansehe, stelle ich fest, dass sie sich nicht geändert haben. Wenn ich den TC einmal schließe und dann wieder öffne und dann wie gewohnt die DOS-Box öffne, finde ich mit "Set" die Variable auch geändert vor.
Mir ist durchaus bewusst, dass man eine DOS-Box schließen und eine neue öffnen muss, um die Änderungen auch zu sehen, aber dass der TC mir über den Button auch nach dem Schließen anscheinend nur die "alte" Instanz liefert, fand ich doch interessant.
Wenn ich übrigens eine DOS-Box über andere Wege ausführe, muss ich den TC nicht schließen.
Ist das ein Bug oder ein Feature?
Viele Grüße,
Marc
Ich arbeite mit Umgebungsvariablen, die ich auch häufig wechseln muss. Diese setze ich in der bekannten Weise über die Systemeigenschaften.
Üblicherweise öffne ich mir eine DOS-Box über einen Button im TC ("C:\WINNT\system32\cmd.exe", keine Parameter) und arbeite dann in dieser Shell. Wenn ich mir nun über "Set" meine Systemvariablen ansehe, stelle ich fest, dass sie sich nicht geändert haben. Wenn ich den TC einmal schließe und dann wieder öffne und dann wie gewohnt die DOS-Box öffne, finde ich mit "Set" die Variable auch geändert vor.
Mir ist durchaus bewusst, dass man eine DOS-Box schließen und eine neue öffnen muss, um die Änderungen auch zu sehen, aber dass der TC mir über den Button auch nach dem Schließen anscheinend nur die "alte" Instanz liefert, fand ich doch interessant.
Wenn ich übrigens eine DOS-Box über andere Wege ausführe, muss ich den TC nicht schließen.
Ist das ein Bug oder ein Feature?
Viele Grüße,
Marc
#85370
2klark
Die Umgebungsvariablen eines jeden Prozesses werden beim Starten eines Prozesses durch den Eltern-Prozess definiert. Somit ist es auch nicht verwunderlich, dass sich die Umgebungsvariablen einer bereits laufenden Total Commander Instanz nicht automatisch aktualisieren.
Möglicherweise gibt es einen Mechanismus, etwa eine Systembotschaft, um Änderungen an dem Systemvariablen automatisch zu übernehmen - ich kenne einen solchen jedoch nicht.
Die Umgebungsvariablen eines jeden Prozesses werden beim Starten eines Prozesses durch den Eltern-Prozess definiert. Somit ist es auch nicht verwunderlich, dass sich die Umgebungsvariablen einer bereits laufenden Total Commander Instanz nicht automatisch aktualisieren.
Möglicherweise gibt es einen Mechanismus, etwa eine Systembotschaft, um Änderungen an dem Systemvariablen automatisch zu übernehmen - ich kenne einen solchen jedoch nicht.
klark,
Soweit ich dich verstanden habe, ist das Problem das, dass der TC nur die Systemvariablen kennt, die bei seinem Start definiert waren, und auch nur diese an seine Childprozesse (die DOS Box z.B.) ubergibt. Deshalb muss man den TC neu starten, damit er auch die neugesetzten Systemvariablen mitbekommt und sie auch weiter ubergeben kann.
Roman
Soweit ich dich verstanden habe, ist das Problem das, dass der TC nur die Systemvariablen kennt, die bei seinem Start definiert waren, und auch nur diese an seine Childprozesse (die DOS Box z.B.) ubergibt. Deshalb muss man den TC neu starten, damit er auch die neugesetzten Systemvariablen mitbekommt und sie auch weiter ubergeben kann.
Roman
Mal angenommen, du drückst Strg+F, wählst die FTP-Verbindung (mit gespeichertem Passwort), klickst aber nicht auf Verbinden, sondern fällst tot um.
Danke für die Antworten.
Ich hatte mir schon gedacht, dass es damit zusammenhängt, wunder mich aber trotzdem darüber, dass ein externes Programm wie z.B. die DOS-Box, dass ich eigentlich nur über einen Link aufrufe, auch ein Childprozess vom TC ist. Aber da fehlt mir vermutlich einfach ein wenig Hintergrundwissen über Programmieren im Allgemeinen und Windows im Speziellen
Viele Grüße,
Marc
Ich hatte mir schon gedacht, dass es damit zusammenhängt, wunder mich aber trotzdem darüber, dass ein externes Programm wie z.B. die DOS-Box, dass ich eigentlich nur über einen Link aufrufe, auch ein Childprozess vom TC ist. Aber da fehlt mir vermutlich einfach ein wenig Hintergrundwissen über Programmieren im Allgemeinen und Windows im Speziellen

Viele Grüße,
Marc
#85370
@klark:
Warum setzst Du die Systemvariablen nicht direkt in der CMD-Instanz, z.b. mit setx?
Wenn Du XP hast, findest Du das in den Support Tools auf der XP CD in der Datei support.cab. Entweder alle Tools installieren oder setx extrahieren und in einen %path%-Pfad packen.
Dadurch ändert sich allerdings nichts daran, daß Du, um die Variablen nutzen zu können, Dich neu einloggen oder rebooten mußt.
Icfu
Warum setzst Du die Systemvariablen nicht direkt in der CMD-Instanz, z.b. mit setx?
Wenn Du XP hast, findest Du das in den Support Tools auf der XP CD in der Datei support.cab. Entweder alle Tools installieren oder setx extrahieren und in einen %path%-Pfad packen.
Dadurch ändert sich allerdings nichts daran, daß Du, um die Variablen nutzen zu können, Dich neu einloggen oder rebooten mußt.
Icfu
Last edited by icfu on 2005-06-28, 16:16 UTC, edited 1 time in total.
This account is for sale
Hi icfu,
Viele Grüße,
Marc
Habe ich denn dann die Systemvariable nur in dieser CMD-Instanz, oder später (z.B. nach Schließen der Box) auch noch? Die Arbeit in der DOS-Box ist nämlich nur ein Teil der Arbeit.Warum setzst Du die Systemvariablen nicht direkt in der CMD-Instanz
Wir arbeiten mir W2k. Gibt es die Tools auch für W2k bzw. kann ich die Tools (z.H. habe ich XP) unter W2k verwenden?Wenn Du XP hast
Viele Grüße,
Marc
#85370
Google hilft:
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/setx-o.asp
und sowie ich das verstehe (darum heißt das Tool ja auch SetX und nicht Set) bleibt die Var nach dem schließen der Dos-Box erhalten
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/setx-o.asp
und sowie ich das verstehe (darum heißt das Tool ja auch SetX und nicht Set) bleibt die Var nach dem schließen der Dos-Box erhalten

Hoecker sie sind raus!
setx setzt wie auch das Systemapplet die Variablen in der Registry, sie sind also dauerhaft. Wie oben gesagt, mußt Du daher eh neu einloggen oder rebooten, um sie überhaupt nutzen zu können. Oder irre ich da? Du schreibst oben " Diese setze ich in der bekannten Weise über die Systemeigenschaften.", aber Du schreibst nichts von Reboot, was mich wundert. Vielleicht erklärst Du das nochmal genauer, wo genau Du die Variablen änderst.Habe ich denn dann die Systemvariable nur in dieser CMD-Instanz, oder später (z.B. nach Schließen der Box) auch noch? Die Arbeit in der DOS-Box ist nämlich nur ein Teil der Arbeit.
Das geht auch unter Windows 2000, kannst die Version von XP nehmen oder Du lädst es Dir hier runter:Wir arbeiten mir W2k. Gibt es die Tools auch für W2k bzw. kann ich die Tools (z.H. habe ich XP) unter W2k verwenden?
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/setx-o.asp
Icfu
This account is for sale
Habe jetzt hier zu Hause nur XP, deshalb bitte Nachsicht bei kleinen Abweichungen: z.B. Rechtsklick auf den Arbeitsplatz -> Eigenschaften (wahlweise Systemsteuerung -> System ) -> Umgebungsvariablen -> Systemvariablen -> Variable auswählen und -> Bearbeiten -> OK -> OKVielleicht erklärst Du das nochmal genauer, wo genau Du die Variablen änderst.
Ich muss danach weder neu einloggen noch rebooten, um die geänderte Umgebungsvariable in einer unabhängig geöffneten DOS-Box benutzen zu können.
Eigentlich ist das auch alles kein Problem, denn schließlich kann ich in Zukunft in diesem Fall auch einfach die DOS-Box z.B. über "Ausführen -> Cmd" starten. Ich bin es aber nun mal gewohnt, alle häufig verwendeten Programme über den TC zu starten, und da ist mir das Verhalten nun mal aufgefallen...
Vielen Dank für Eure Hilfe,
Marc
#85370
Hm, ich habe hier wohl ein Problem mit meinem Applikationsstarter TypeAndRun. Wenn ich den TC über diesen starte, werden geänderte Systemvariablen NICHT übernommen und damit habe ich bei Aufruf von CMD aus dem TC heraus auch keine Anzeige der geänderten Variablen.
Wenn ich den Start-Ausführen-Dialog nutze oder den TC über eine normale Windowsverknüopfung starte, sehe ich sie.
Das muß ich weiter untersuchen, bin im Moment etwas sehr verwirrt.

Icfu
Wenn ich den Start-Ausführen-Dialog nutze oder den TC über eine normale Windowsverknüopfung starte, sehe ich sie.
Das muß ich weiter untersuchen, bin im Moment etwas sehr verwirrt.


Icfu
This account is for sale