externes Programm starten mit Parameter
-
hei,
Ich starte aus meiner MDI Anwendung (Child-Form) ein externes Programm.
Das externe Programm liegt im gleichen Verzeichnis. Die Datei, die mit dem externen Programm geöffnet werden soll, liegt ein Verzeichnis tiefer. Leider funktioniert dies nicht. Die Wege sind korrekt. Ist aber die Datei im gleichem Verzeichnis, funktioniert es.MDI Anwendung:
void __fastcall TMain::tbRumSimClick(TObject *Sender) { AnsiString SourceName; AnsiString ProjektName; //aktive mdi child TTextStuff *Active = (TTextStuff*)this->ActiveMDIChild; if(Active->Project.HasName) { ProjektName = ExtractFilePath(Application->ExeName) + "EasySimulation.exe"; SourceName = Active->Project.CurrentFile; RunApplication(ProjektName.c_str(), SourceName.c_str()); } else // { //FEHLER } } //---------------------------------------------------------------------------Run Application:
void __fastcall TMain::RunApplication(LPCTSTR FileName, LPCTSTR FileParam) { int ret = (int) ShellExecute(0, "open", FileName, FileParam, 0, SW_SHOWNORMAL); if (ret <= 32) { AnsiString msg; switch(ret) { case ERROR_FILE_NOT_FOUND, SE_ERR_FNF : msg = "Die angegebene Datei '" + AnsiString(FileName) + "' wurde nicht gefunden!"; break; case ERROR_PATH_NOT_FOUND, SE_ERR_PNF : msg = "Der Pfad zur Datei '" + AnsiString(FileName) + "' wurde nicht gefunden!"; break; case ERROR_BAD_FORMAT : msg = "Die aufgerufene Anwendung ist ungültig oder beschädigt!"; break; case SE_ERR_ACCESSDENIED, SE_ERR_SHARE : msg = "Der Zugriff auf die Datei '" + AnsiString(FileName) + "' wurde vom Betriebssystem verweigert!"; break; case SE_ERR_ASSOCINCOMPLETE, SE_ERR_NOASSOC : msg = "Der angegebene Dateityp ist auf Ihrem Computer keiner Anwendung zugeordnet!"; break; case 0, SE_ERR_OOM : msg = "Zum Ausführen der Anwendung ist nicht genügend Arbeitsspeicher frei!"; break; default : msg = "Datei '" + AnsiString(FileName) + "' konnte nicht geöffnet werden!"; } Application->MessageBox(msg.c_str(), "Fehler", MB_OK + MB_ICONERROR); } } //---------------------------------------------------------------------------externes Programm:
void __fastcall TForm1::FormShow(TObject *Sender) { AnsiString fileName, ext; if (ParamCount() > 0) // if parameters are present { fileName = ParamStr(1); // get file name to open ext = ExtractFileExt(fileName.UpperCase()); // get file extension if (FileExists(fileName) && ext == ".S68") { OpenDialog1->FileName = fileName; // save for reload OpenFile(fileName); // open specified file } } Form1->Caption = TITLE; // set title Log->LoadSettings(); //load simulator settings from file initSim(); // don't call before LoadSettings() } //---------------------------------------------------------------------------was mach ich falsch ?
bis bald dieleena
-
Hallo,
Was steht denn in SourceName? Ist es der richtige Pfad? Ich nehme einfach mal an, dass da nur der Dateiname drinsteht. Verwende dann besser den kompletten (absoluten) Pfad.
-
hei,
sowohl in ProjektName als auch in SourceName steht der komplette (absoluten) Pfad.
in ProjektName steht: E:\\Borland\\Projekt\\Haupt.exe
in SourceName steht: E:\\Borland\\Projekt\\Examples\\xyz.txt
die " \\ " sind auch korrekt.
bis bald dieleena
-
Hallo
du hast doch schon die Fehlerauswertung, warum postest du nicht welche Fehlermeldung beim Ablauf auftritt? "funktioniert nicht" ist keine ausreichende Fehlerbeschreibung.
bis bald
akari
-
Das sollte dann so auch gehen. Debugge doch mal das aufzurufende Programm (wenn möglich) und schau mal was dort für ein Pfad ankommt.
-
hei,
eine " Fehlermeldung beim Ablauf auftritt " erscheint ja nicht. Das externe Programm wird ja gestartet, aber die öffnet nicht die Datei " E:\\Borland\\Projekt\\Examples\\xyz.txt ".
Wenn ich das externe Programm mit diesen Parameter starte, funktioniert es doch.
ProjektName steht: E:\\Borland\\Projekt\\Haupt.exe
SourceName steht: E:\\Borland\\Projekt\\xyz.txt
@Braunstein Frage: wie debug ich das extenes Programm? Ich starte doch hier eine andere exe.
Das externe Programm arbeitet doch korrekt, wenn exe und txt im gleichem Verzeichnis sind.
bis bald dieleena
-
Hallo
dann schau doch mal, was bei dem Zielprogramm an Parametern ankommt (Messagebox, Logdatei)
bis bald
akari
-
hei,
Habe deinen Rat befolgt. Fehler von mir. Falsche Übergabe des Dateiname. Nichts für ungut. Sollte eine Pause einlegen.
Danke an alle.
bis bald dieleena