# Jar mittels C++ starten Konsole verschwindet nicht!



## daniel_sun (4. Oktober 2012)

Hi,

ich will meine JAR mittels einer kleinen EXE starten:


```
#include <stdlib.h>
#include <stdio.h>
using namespace std;

int main(int argc, char *argv[]){
	system("javaw.exe -jar myProg.jar");
}
```

Das Javaprogramm startet auch nur die Konsole verschwindet nicht. Sie bleibt da sollte Sie nicht bei javaw verschwinden?! Auch wenn ich nur javaw -jar myProg.jar eingebe komme ich zu keinem Erfolg!

Auch eine system("exit") oder exit(0); führt zu keinem erfolg. Ich kann die Konsole manuell Schnießen  und mit dem Java Programm arbeiten. Schließe ich das Javaprogramm schließt sich die Konsole mit!


----------



## timestamp (4. Oktober 2012)

Aus EXE schließe ich mal, dass das ganze unter Windows läuft. Versuch's mal so:

```
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
using namespace std;
 
int main(int argc, char *argv[]){
   char* ctitle = "jar starter"; 
   SetConsoleTitle(ctitle);
   system("javaw.exe -jar myProg.jar");
   HWND hwnd = FindWindow ( NULL, ctitle ); 
   SendMessage( hwnd, WM_CLOSE, 0, 0 ); 
}
```


----------



## daniel_sun (4. Oktober 2012)

Gleiches Problem wie vorher. Komisch das ich es schon mal so wie oben gelöst (bei nem andern Programm (hab leider den code nicht mehr)) habe aber da ging es nun jetzt aber nicht mehr.


----------



## sheel (4. Oktober 2012)

Naja, du erstellst ja auch ein Konsolenprojekt, und verwendest mit system eine "Konsolenfunktion"
(da Messages herumsenden ist, wenn schon, auch nur ein Workaround).

Mach ein Win32-Projekt, WinMain, und CreateProcess.
Statt Konsole, main, system

Dann entsteht überhaupt keine Konsole, die man wegbekommen muss.


----------



## daniel_sun (4. Oktober 2012)

Da bräucht ich mal unterstützung in sachen code oder zumindest ein tutorials denn von c++ hab ich nur sehr sehr wenig ahnung


----------



## ComFreek (4. Oktober 2012)

Welche IDE verwendest du?

Du musst einfach ein neues Win32-Projekt erstellen.
Hier ist die Grundstruktur der main.cpp:

```
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance,
                      HINSTANCE hPrevInstance,
                      LPSTR lpCmdLine,
                      int nCmdShow )
{
  // Use CreateProcess()
  return 0;
}
```
Dokumentation zur CreateProcess-Funktion findest du hier: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx


----------



## daniel_sun (4. Oktober 2012)

Ich hab diesen Code-Schnipsel gefunden, damit gehts:


```
#include <stdio.h>
#include <windows.h>
int main( VOID )
{
	STARTUPINFO si;
	PROCESS_INFORMATION pi;
	int spi=sizeof(pi);
	int ssi= sizeof(si);
	ZeroMemory( &si, sizeof(si) );
	si.cb=sizeof(STARTUPINFO); //sizeof(si);
	ZeroMemory( &pi, sizeof(pi) );
	 int b=0;
	 printf( "\nCalling CreateProcess \n" );
	// Start the child process.
	b=CreateProcess("c:\\windows\\system32\\cmd.exe ",
	" /C javaw  -jar myProg.jar"  ,	 // Command line.
		NULL,			 // Process handle not inheritable.
		NULL,			 // Thread handle not inheritable.
		0,			// Set handle inheritance to FALSE.
	   CREATE_NO_WINDOW,				// No creation flags.
		NULL,			 // Use parent's environment block.
		NULL,			 // Use parent's starting directory.
		&si,			  // Pointer to STARTUPINFO structure.
		&pi );			// Pointer to PROCESS_INFORMATION structure.
	if( b==0)

	{
		printf( "CreateProcess failed %d (%ld).\n", b, GetLastError() );
		return -1;
	}
	printf( "\nCreateProcess OK\n" );
}
```


----------



## sheel (4. Oktober 2012)

Da kommt dann doch wieder eine Konsole, wenn auch nur kurz...
Und sich mal mit der Doku auseinandersetzen
statt irgendwo her kopieren wäre doch nichts Schlechtes


----------

