Umgebungsvariable des Parent-Prozesses setzen

21/11/2007 - 22:25 von Ralph rkhb Bauer | Report spam
Hallo,

ich habe ein MSDOS-Programm geschrieben, dass den physikalischen Speicher
ermittelt und in eine Umgebungsvariable eintràgt. Dieses Programm làuft auch
unter Windows 98 SE, wo es eingesetzt werden soll. Nun hat mich der Ehrgeiz
gepackt, dieses Programm als Win32-Konsolen-Programm auch unter WinXP zum
Laufen zu kriegen, was es bislang nicht tut, weil die Funktion E820h des
BIOS-Interrupts 15h dort nicht funktioniert.

Das Problem ist, dass ich das Anlegen einer Umgebungsvariable in einer
Batchdatei heraus nicht hinkriege. Wenn ich aber lediglich einen Stub
schreibe ("This program cannot be run in NT mode"), dann wird dieser Stub
auch von Windows 98 SE ausgeführt, wo ja das MSDOS-Programm wunschgemàß
funktioniert, hingegen kein erweiterter FOR-Befehl (zum Eintragen des
Programmergebnisses in eine Umgebungsvariable) vorhanden ist.

Nun fallen mir zwei mögliche Wege ein:

1) Der Stub erkennt Win9x und zwingt das Betriebssystem, das MSDOS-Programm
auszuführen,

2) Es gibt eine trickreiche Lösung, in XP Umgebungsvariablen des
Parentprozesses zu àndern.

Hat jemand für einen der beiden Wege eine Lösung, einen hilfreichen Link
oder gar einen funktionierenden Beispielscode?

viele grüße
ralph
 

Lesen sie die antworten

#1 Alexander Bartolich
22/11/2007 - 09:42 | Warnen spam
Ralph 'rkhb' Bauer schrieb:
[...]
Das Problem ist, dass ich das Anlegen einer Umgebungsvariable in einer
Batchdatei heraus nicht hinkriege. Wenn ich aber lediglich einen Stub
schreibe ("This program cannot be run in NT mode"), dann wird dieser Stub
auch von Windows 98 SE ausgeführt, wo ja das MSDOS-Programm wunschgemàß
funktioniert, hingegen kein erweiterter FOR-Befehl (zum Eintragen des
Programmergebnisses in eine Umgebungsvariable) vorhanden ist.



Unter cmd.exe kann man die Ausgabe eines Programms direkt verarbeiten,
und diese z.B. in einer Umgebungsvariablen speichern.

for /f %i in ('cd') do set "current_dir=%i"

command.com fehlt diese Möglichkeit.

Die portable Lösung besteht darin, die Ausgabe des Programms in eine
temporàre Datei umzulenken, und diese Datei dann als Skript auszuführen.
Wenn die Ausgabe des Programms nicht aus einer set-Anweisung besteht,
muss man sich diese basteln. Die Schwierigkeit besteht darin, dass echo
immer einen Zeilenwechsel ausgibt.

echo set current_dir=^^> a.bat
cd>> a.bat
call a.bat

http://news.albasani.net/

Ähnliche fragen