010
07.02.2006, 09:08 Uhr
~Hanss
Gast
|
Guten Morgen.
Das mit dem C-Programm, das eine Batch erstellt, hab ich auch schon probiert Hab einfach per C-Programm in die Batch reingeschrieben:
| Code: |
@ECHO OFF SET USER=Benutzer SET PASSWD=beliebig argv[1],argv[2],argv[3],argv[4],...,argv[n]
|
argv[n] sind die an das C-Programm übergebenen Parameter, die einfach in die Batch geschrieben werden. Der Programmaufruf ist dann z.B.:
| Code: |
Programm.EXE net use s: \\Server %PASSWD% /USER:%USER%
|
Also, um noch ein wenig weiter auszuholen, warum ich denke es über EnvVars zu realisieren:
Ich soll ein Programm für unsere Erstinstallation (Microsoft´s unattended) schreiben. Bisher wurde die Anmeldung an den Installationsserver über eine Batch hergestellt, in der aber leider Benutzername und Passwort zur Domänenanmeldung im Klartext enthalten sind. In der "alten" Batch steht nichts weiter drin als:
| Code: |
@ECHO OFF SET USER=Benutzer SET PASSWD=beliebig %1 %2 %3 %4 %5 %6 %7 %8 %9
|
wobei %n hierbei für die an die Batch übergebenen Parameter stehen.
Dies soll ich nun mittels des C-Programms umgehen. Um das "Sicherheitsloch" durch den Klartext in der Batch ein wenig zu stopfen, wollte ich die Batch zur Laufzeit des Installationsverfahrens erstellen, die Serverbindung herstellen und die erstellte Batch daraufhin wieder löschen lassen. Sie existiert dann halt nur für einen kurzen moment. Die Sicherheit ist damit völlig ausreichend. (für unsere Zwecke).
Das Programm dazu sieht folgendermaßen aus:
| C++: |
#include <stdlib.h> #include <stdio.h> #include <process.h> #include <dos.h> #include <unistd.h>
int main(int argc, char *argv[]) { int i; //Schleifenzähler zum Durchlaufen der Argumente FILE *fp; //Filepointer
if(!(argc>1)){ puts("Zu wenige Argumente\n"); } else{ if ((fp=fopen("Doit.bat","w"))==NULL){ puts("Öffnen der Datei Doit.bat fehlgeschlagen\n"); } else{ // Im Folgenden wird die Batch geschrieben puts("Doit.bat wird erstellt\n"); fprintf(fp,"@ECHO OFF\n"); fprintf(fp,"SET USER=Benutzer\n"); fprintf(fp,"SET PASSWD=beliebig\n"); fprintf(fp,"SET\n"); //SET zur Testausgabe for(i=1;i<argc;i++){ fprintf(fp,"%s ",argv[i]); //Parameter werden in Batch geschrieben } fclose(fp) } } puts("Doit.bat wird aufgerufen\n"); system("doit.bat"); //Aufruf der erstellten Batch //execlp("C:\\WATCOM\\samples\\ide\\win\\doit.bat",NULL); //perror("execl() gescheitert!"); //remove("doit.bat"); return EXIT_SUCCESS; }
|
Dieses C-Programm wird 16 Bit kompiliert, um dann in die Erstinstalltion integriert zu werden. Leider bekomme ich beim Aufrufen des Programms - an der Stellte:
| Code: |
system("doit.bat"); //Aufruf der erstellten Batch
|
- den Fehler:
| Code: |
Kein Speicher mehr im Umgebungsbereich
|
Wie gesagt, es wird 16 Bit kompiliert. Leider weiss ich mir keinen Rat mehr.Es scheiter am Aufruf der Batch-Datei durch das C-Programm, denn der manuelle Aufruf der erstellten Batch funktioniert. Die EnvVars werden ohne Probleme gesetzt und könnten genutzt werden. Mittels des C-Programms halt nicht...
Evtl. hat ja noch jmd. eine Idee, wie ich die Aufgabenstellung anders lösen kann, als mit Hilfe der EnvVars?! Bin für jede anregung dankbar.
Schöne Grüße, Hanss |