Starten von externen Programmen
-
Hallo Leute,
ich habe ein Problem mit meiner Java-Apps. Diese Applikation will ich aus dem Netzwerk starten, leider haben sich auf einigen Rechnern Pack-Programme auf die jar MIME registriert. Wodurch ich die jar Datei nicht direkt über die VM starten kann. Meine Entwicklungsumgebung ist in der Lage eine exe aus einer Java-Apps zu kompilieren. Leider ruft die exe die CMD /C auf um die integrierte jar Datei zu starten. Jetzt ist das Problem aber, das die Applikation aus einem UNC Pfad aufgerufen werden soll. CMD /C ist aber nich UNC fähig. Ich möchte jetzt ein C++ Programm als Einstiegspunkt für Windows Rechner programmieren, die meine jar Datei startet. Leider bin ich was C++ angeht seit Jahren nicht mehr fitt.
Ich habe folgenden C++ geschrieben
using namespace std; #include <windows.h> #include <string> int main (int argc, char *argv[]) { string rt = "java -Xmx128m -jar ProE-Starter.jar "; string arg = argv[1]; string cmd = rt + arg; STARTUPINFO si; PROCESS_INFORMATION pi; memset(&si,0,sizeof(STARTUPINFO)); si.cb=sizeof(STARTUPINFO); si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=SW_HIDE; CreateProcess(NULL,(char*)cmd.c_str(),NULL,NULL,false,0,0,0,&si,&pi); WaitForSingleObject(pi.hProcess,3000); CloseHandle(pi.hThread); return 0; }
Mein Problem ist:
1. Ein „unschönes“ CMD Fenster geht vor der eigentlichen Applikation auf was dann auch die ganze Zeit über bleibt.
2. Der Befehl java –jar file.jar Blockiert die Shell und das C++ Programm gibt den Befehl nicht frei (ich will das nach dem starten das C++ Programm sich beendet)Hat jemand eine Lösung für mein Problem?
-
alexdgg schrieb:
1. Ein „unschönes“ CMD Fenster geht vor der eigentlichen Applikation auf was dann auch die ganze Zeit über bleibt.
Nimm eine Windows- und keine Konsolenanwendung (mit WinMain).
alexdgg schrieb:
2. Der Befehl java –jar file.jar Blockiert die Shell und das C++ Programm gibt den Befehl nicht frei (ich will das nach dem starten das C++ Programm sich beendet)
Eventuell kannst du statt CreateProcess mal ShellExecute oder ShellExecuteEx probieren.
-
Zudem fehlt ein CloseHandle(pi.hProcess)..
Simon
-
Es ist die CreationFlag CREATE_NO_WINDOW die gefehlt hat. Damit erzeugt C++ kein Fenster.