Createprocess mit Parameter aus *.dat File
-
Hallo Forum,
ich beschreibe euch mal kurz den Ablauf. Programm holt den Pfad eines Programmes aus einer txt File mit Hilfe von ifstream dann soll das Programm gestartet werden.... nun stellt sich folgendes Problem ein. Auf XP Rechnern, auf denen (Borland 5.02) installiert ist, funktioniert das Programm. Aber auf anderen XP Rechnern (trotz mitgegebener dlls) kann das Programm nicht gestartet werden... Kann das sein, dass es daran liegt, das es in der Textfile nicht mit C:\\win\\test.exe sondern nur mit C:\win\test.exe gespeichert wird?
ptr_psdExeFile = new char[1000]; ::memset(ptr_psdExeFile, 0, 1000); ifstream fin("test.dat"); if(!fin) { ::strcpy(ptr_psdExeFile, EXE_DEFAULT); } else { string tmpFILE_EXE; fin >> tmpFILE_EXE; fin.close(); ::memset(ptr_psdExeFile, 0, 1000); ::strcpy(ptr_psdExeFile, tmpFILE_EXE.c_str()); // } if(!ifstream(ptr_psdExeFile)) { //blabla } else { CreateProcess( NULL, // No module name (use command line). ptr_psdExeFile, // Command line. NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &siPSD, // Pointer to STARTUPINFO structure. &piPSD ); }
-
hi,
im endeffekt muss in der .txt C:\win\test.exe stehen, dass du beim reinschreiben darauf achten musst, den backslash zu escapen (oder zu quoten)
ist wichtig. ansonsten wird das nachfolgende zeichen als escape-sequenz betrachtetcout<<"\a"; // Escapesequenz (alert) cout<<"\\a"; // gibt "\a" aus.Stell auch sicher, dass das win- Verzeichnis auf den anderen rechnern existiert. MFG, '][' !
-
Wird denn der Wert aus der test.dat übehaupt richtig eingelesen - evtl. solltest du da einen absoluten Pfad verwenden (evtl. vorher mit dem von GetModuleFileName zusammenbauen)

-
Guten Morgen zusammen,
das aufzurufende Programm existiert und steht so in der File: C:\apps\start.exe Bei mir auf dem Rechner NT und auf XP (mit Borland)funktioniert das Aufrufen einwandfrei. Nur auf XP (wahrscheinlich auch auf anderen Systemen ohne Borland) gibt es Probleme. Er ruft zwar nen CreateProzess auf, aber nicht mit dem gewünschten Ergebnis, dass die start.exe ihren Dienst verrichtet. Die dlls wurden dem Programm mitgegeben, aber irgendwie scheint es trotzdem nicht so einwandfrei zu funktionieren...
PS: Ich könnte es ja auch mal mit ner static exe probieren, aber leider habe ich noch die Borland 5.02 Version und da kann ich nicht alles so einstellen wie es in der FAQ beschrieben ist. Z.B. fehlt mir die Option, das mit den Packages zur Laufzeit zudeaktivieren, jemand vielleicht noch ne Idee?
Ansonsten möchte ich mich jetzt schon mal für eure Hilfe bedanken.
Gruß
Holger
-
Hast du dir ptr_psdExeFile mal ausgeben lassen? Stimmt der Pfad?
Und wohin hast du die DLLs kopiert?
-
flenders schrieb:
Hast du dir ptr_psdExeFile mal ausgeben lassen? Stimmt der Pfad?
Da denn bei der Überprüfung, ob die darin enthaltene Datei existiert, kommt keine Fehlermeldung. Sprich, die Datei wird gefunden...
Und wohin hast du die DLLs kopiert?
Die Dlls sind direkt in dem EXE Verzeichnis. Also nicht im System32 oder so... Ist auch nicht so geplant, dass die da rein sollen...
Hätte sonst noch gedacht, dass evtl. der Stringpointer nicht richtig funktioniert...
-
Hast du dir ptr_psdExeFile mal direkt ausgeben lassen und überprüft:
MessageBox(NULL,ptr_psdExeFile,"",0);Ansonsten: Klappt es denn mit einer ganz normalen anderen Anwendung? Und Kanst du die Anwendung so direkt ausführen?
Du solltest einfach mal etwas eingrenzen, wo überhaupt dein Problem liegt
-
flenders schrieb:
Du solltest einfach mal etwas eingrenzen, wo überhaupt dein Problem liegt

anhang: rückgabewerte und getlasterror() sind auch deine freunde bei der fehlerfindungen.
-
So Morgen,
das Programm ist eine Art Watchdog.. Nur auf dem Zielsystem ohne dem Borland Kram läuft es trotz mitgegebener Bibliotheken nicht... Das ist mein Problem ;)) Nun das Programm funktionert bis zum Starten des Programms mit dem Aufruf CreateProcess ... also muss mit dem Char*, dass den Programmpfad enthält irgendwas was nicht stimmen... Gut, aber ich denke, da werde ich selber bis zur Vergasung suchen müssen. Trotzdem noch mal Danke!!
Gruß
Holger
-
LJ_Skinny schrieb:
Gut, aber ich denke, da werde ich selber bis zur Vergasung suchen müssen.
Wieso?
Breakpoint an die Zeile mit dem CreateProcess und mit'm Debugger die Werte der Variablen auslesen... da wird niemand bei vergast...
-
Breakpoint an die Zeile mit dem CreateProcess und mit'm Debugger die Werte der Variablen auslesen... da wird niemand bei vergast...
Danke für den Tipp, aber das geht ja nicht, da kein Borland auf dem Zielsystem installiert ist (und nicht installiert werden darf...)
Nur auf dem Zielsystem gibt es Probleme.Gruß
Holger
-
Hast du dir denn jetzt mal endlich den Pfad nach dem Auslesen (also den, den du für CreateProcess verwendest) ausgeben lassen?
Kannst du die Anwendung direkt starten? Falls nicht hat das Problem ja überhaupt nichts mit CreateProcess zu tun
-
Gib Dir doch mal mit 'ner simplen MessageBox die Variable ptr_psdExeFile aus...
Evtl. fehlt ein PathQuoteSpaces(ptr_psdExeFile); vorher, falls da Leerzeichen im Pfad sind...