Umgebungsvariablen in MS-DOS mit C ansteuern



  • Hallo zusammen,

    hab mich heute erst registriert, jedoch keine Möglichkeit vom Arbeitsplatz den Acc zu aktivieren, deswegen schreibe ich erstmal anonym.
    Hätte eine Frage zu o.g. Thema:

    Ich hab den Auftrag bekommen ein C-Programm zu schreiben, welches beim Aufruf Parameter übergeben bekommt, die vom C-Programm in eine Batch geschrieben werden.
    Diese Batch wiederum soll eine Netzlaufwerkanbindung vornehmen.
    Passwort und Benutzername, die zur Anmeldung gebraucht werden, sollen aus den MS DOS Umgebungsvariablen entnommen werden, die ich mit meinem C-Programm vorher gesetzt habe.
    Das ganze in Code sieht so aus:

    #include <stdlib.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
    	int i; 
    	FILE *fp;
    	//Umgebungsvariablen setzen und auf Fehler prüfen
    	if (putenv("LMUSER=xxxxxxx")==0 && putenv("LMPASSWD=xxxxxxx")==0){
    	}	
    	else {
    		printf("Fehler beim Setzen der Umgebungsvariablen aufgetreten");
    	}
             //Prüfung der übergebenen Paramter
    	if(!argc>1){
    	}
    	else{
    		if ((fp=fopen("Doit.BAT","a"))==NULL){
    			}
    			else{
                                         //Schreiben der Paramter in die Batchdatei
    				for(i=1;i<argc;i++){
    				fprintf(fp,"%s ",argv[i]);
    				}
    				fclose(fp);
    			}
    	}
             //Aufruf der Batchdatei
    	system("CALL Doit.BAT");
    	//system("DEL Doit.BAT");
    return EXIT_SUCCESS;
    }
    

    ---------
    Entschuldigt meinen Stil und eine etwas umständliche Programmierung.
    Meine Kenntnisse lassen leider etwas zu wünschen übrig.🙄
    ---------

    Worum es mir nun geht ist Folgendes:
    Beim Testen des Programms in einer CMD auf einem Windows XP Rechner hat das Setzen der Umgebungsvariablen, sowie das Schreiben und Aufrufen der Batch funktioniert.
    Wenn ich das ganze nun produktiv teste, passiert garnix!

    Der Aufruf meines Programms erfolgt in einem MS-DOS RAMdrive auf 16 Bit Win 98-MS-DOS.

    Kann es daran liegen, dass die Umgebungsvariablen, welche vom C-Programm gesetzt und von meiner Batch gelesen werden sollen, nicht mehr existieren, wenn die Batch darauf zugreifen soll?
    Liegt es evtl. an der genutzten C-Funktion, welche die Umgebungsvariablen setzt ?
    Wenn dem so sein sollte, gibt es eine Möglichkeit diese Umgebungsvariablen länger zu speichern?

    Bin dankbar für jeden Tip und hoffe, es ist im richtigen Forum gelandet!
    schöne Grüße,
    wiesel_123



  • ist dir klar, dass fopen(..., "a") anfuegen bedeutet?

    was steht in der batchdatei drin, nachdem du dein programm ausgefuehrt hast?



  • Hi, danke dir für die schnelle Antwort.

    ja, ich weiss, dass "a" für append steht. Und in diesem Fall macht das nichts, da diese batch nach ausführung eigentlich wieder gelöscht wird.
    Lediglich zur besseren Überprüfbarkeit auf Fehler hab ich den Teil auskommentiert.

    Die Batch ist leer... 😞



  • if (fopen... == NULL) { puts("du hast keine fehlermeldungen vorgesehen!");} else {...



  • ich glaube, unter dos geht das was du willst nicht. dir bleibt wohl nichts anderes, als in der batch-datei zwei set-befehle am anfang einzufügen.

    bin mir aber nicht sicher. könnte sein, daß ich falsch liege.



  • ich bezweifle, dass es sich hier wirklich um ms dos handelt...



  • müssen es umgebungsvariablen sein? könntest doch dem programm parameter übergeben (argc - argv).



  • Morgen!

    Oben genanntes Prob hat sich erübrigt.
    Schreibe nun den Befehl zum Setzen der Umgebungsvar in die Batchdatei mit rein, die im C-Programm erstellt wird.
    Jetzt sagt mir MS DOS immer nur, wenn die Batch über das C Programm angestoßen wird, dass der Umgebungsspeicher zu klein sei.
    starte ich die erstellte Batch - mit gleichem Inhalt - von Hand, dann gehts.
    Sehr komische Geschichte, aber das krieg ich auch noch hin 🙂

    Danke für eure Ideen und Anregungen.



  • die command.com hat gaub ich einen parameter, mit dem man die größe des environment-speichers einstellen kann. kann mich aber beim besten willen nicht mehr erinnern. ist schon so lange her.

    system("c:\\command.com <env-parameter> /C batch.bat");
    

    oder so...



  • Daran hatte ich auch schon gedacht.
    Was mich nur verwundert, ist, dass, wenn ich das C Programm die Batch aufrufen lasse, besagter Fehler kommt(Zu wenig Speicherplatz...).
    Rufe ich die gleiche batch händisch auf, schreibt er die Umgebungsvariablen ohne Probleme...

    werde das mit der Speichervergrößerung mal probieren, kann mir aber beim besten Willen nicht erklären, wie dieser Fehelr einerseits auftritt, andererseits (beim manuellen start) nicht...?



  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten