PDA

Visualizza la versione completa : C++ Eseguire comando sul prompt (senza visualizzare console)


SimoVinci
06-11-2009, 14:27
Ciao a tutti, sono 2 giorni che cerco su google una soluzione e non trovo niente di chiaro.

Il mio scopo è quello di creare un exe che faccia partire la mia applicazione java con il comando
javaw -jar Programma.jar.

- Non mi accontento di un semplice .bat perché voglio mettere l'icona del programma.
- Non voglio che si veda la console.
- Ho provato JSmooth, execJ, Java Launcher ma nessuno di questi funziona (strani errori di seg fault o array out of bounds)



Dopo mille ricerche sono giunto al seguente codice:


#include <windows.h>
#include <stdlib.h>

int main() {
system("javaw -jar Programma.jar");

/** Queste 2 righe prendono la console e la nascondono */
HWND hwnd=FindWindow("ConsoleWindowClass",NULL);
ShowWindow(hwnd,SW_HIDE);

return 0;
}


Ma per qualche motivo folle, il programma termina dicendo che
javaw non è riconosciuto come comando interno o esterno (stessa cosa con java, javaw.exe e java.exe)... Non vede le variabili d'ambiente!
Sono su Windows 7 (64bit) per intenderci (probabilmente su XP questo codice funzionava, ma ho bisogno della piena compatibiità).


Su google trovo moltissima gente che consiglia di provare con ShellExecute() o CreateProcess(), vi chiedo di avere il buon cuore di scrivermi il codice completo (e magari testato) perché queste funzioni hanno una documentazione obbrobbriosa con degli esempi puntualmente non funzionanti.

Stoicenko
06-11-2009, 19:48
Su google trovo moltissima gente che consiglia di provare con ShellExecute() o CreateProcess(), vi chiedo di avere il buon cuore di scrivermi il codice completo (e magari testato) perché queste funzioni hanno una documentazione obbrobbriosa con degli esempi puntualmente non funzionanti.

E fanno bene.. la system non va usata!!

La documentazione su MSDN online è fatta bene, puntuale e con esempi che funzionano..

Spiega cosa non ti funziona, il forum non è fatto per "scrivermi il codice completo (e magari testato)"

sorry

SimoVinci
06-11-2009, 20:13
Originariamente inviato da Stoicenko
...

Spiega cosa non ti funziona, il forum non è fatto per "scrivermi il codice completo (e magari testato)"

sorry

Per risponderti mi autocito:

Originariamente inviato da SimoVinci
Ma per qualche motivo folle, il programma termina dicendo che
javaw non è riconosciuto come comando interno o esterno (stessa cosa con java, javaw.exe e java.exe)... Non vede le variabili d'ambiente!




Ok che la system() non va usata, ma cosa proponi come alternativa? Come posso eseguire il comando "javaw -jar Programma.jar" senza visualizzare una console?


Ho chiesto (gentilmente mi pare, parlando di buon cuore) di scrivermi l'intero codice semplicemente per 2 motivi:
1- Se hai letto bene capirai che chiedo un codice cortissimo
2- Ho già ricevuto risposte di gente che mi dice di guardare la documentazione di ShellExecute o CreateProcess senza altri consigli. Purtroppo su queste pagine non trovo neanche un esempio che faccia al caso mio (e a volte che non si fa neanche compilare). Non mi sembra di chiedere la luna con un esempio, sorry :bhò:

Alex'87
06-11-2009, 20:41
Originariamente inviato da SimoVinci
- Ho provato JSmooth, execJ, Java Launcher ma nessuno di questi funziona (strani errori di seg fault o array out of bounds)Che problema ti ha dato JSmooth? Io lo uso da una vita e mi ha sempre funzionato correttamente :master:

SimoVinci
07-11-2009, 03:36
Dunque, JSmooth

1- Prima di installarsi mi obbliga a scaricare e installare la JVM a 32 bit (ho già l'altra!)
2- Una volta installato
- lo apro
- scelgo lo skeleton WindowedWrapper
- setto i giusti parametri in Executable (con icona)
- in application gli do il percorso del mio Jar
- l'ultimo pannello non lo tocco
- compila correttamente
- sposto l'exe nella cartella del programma.
- lo eseguo
- Si apre la classica finestra "Il programma ha smesso di funzionare", ci sono i dettagli che sono i seguenti:



Firma problema:
Nome evento problema: APPCRASH
Nome applicazione: PneumoArchive2.exe
Versione applicazione: 0.0.0.0
Timestamp applicazione: 4650b8ed
Nome modulo con errori: jvm.dll
Versione modulo con errori: 11.2.0.1
Timestamp modulo con errori: 49724dc7
Codice eccezione: c0000005
Offset eccezione: 000dee08
Versione SO: 6.1.7600.2.0.0.256.1
ID impostazioni locali: 1040
Informazioni aggiuntive 1: 0a9e
Ulteriori informazioni 2: 0a9e372d3b4ad19135b953a78882e789
Ulteriori informazioni 3: 0a9e
Ulteriori informazioni 4: 0a9e372d3b4ad19135b953a78882e789

Leggere l'informativa sulla privacy online:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0410

Se l'informativa sulla privacy online non è disponibile, leggere quella offline:
C:\Windows\system32\it-IT\erofflps.txt



Forse il problema è Windows 7 a 64 bit, io vorrei trovare un codice che funzioni su qualsiasi piattaforma Windows (XP, Vista e 7).

Loading