Gå til innhold

Problemer med kjøring av java via ShellExecute (C++)


Anbefalte innlegg

Hepp,

 

Har en MFC DLL i C++ som jeg bruker for å starte et java-program, jeg prøver å få dette til å kunne bli startet i "din" "program files" mappe, noe som er lettere sagt enn gjort.

 

ShellExecute(0, "open", "javaw", "-classpath %ProgramFiles%/VikingCopy VikingCopy", NULL, SW_SHOW);

 

Overnevnte kodesnutt ville jeg da tro skulle fungere (har og prøvd med fnutter rundt classpath), men den medfører bare at java ikke klarer å finne "VikingCopy" klassen.

 

Samme kode kan fint kjøres fra f.eks kommandolinjen uten problem.

 

Noen tips til hvordan jeg får løst dette?

Lenke til kommentar
Videoannonse
Annonse

Den funker, men System kaller det via command-promt, noe som da gir et sort vindu et lite sekund, noe som er litt plagsomt når det er et GUI-program som startes opp. :)

 

Edit:

 

Testet ut:

"WinExec("javaw -classpath \"%ProgramFiles%/VikingCopy\" VikingCopy",SW_SHOWNORMAL);"

 

Men den trigger samme feil som over, mens System funker fint, forruten command-promten)

Lenke til kommentar
det kan ha med environment variabler å gjøre.

Virker slikt, prøvde og med:

 

	LPSTR buf;
int bufsize;
char* buf2;
GetEnvironmentVariable("ProgramFiles",buf,bufsize);
sprintf(buf2,"javaw -jar %s/VikingCopy/VikingCopy.jar",buf);
WinExec(buf2,SW_SHOWNORMAL);

Noe som og krasjet explorer.

 

Har gjort om javaapplikasjonen til en jar og har prøvd å starte den med

 

WinExec("javaw -jar %ProgramFiles%/VikingCopy/VikingCopy.jar",SW_SHOWNORMAL);

Men da klarer ikke Java å finne jaren, selv om det funker fint ved manuell kjøring.. :)

Lenke til kommentar

char* buf2;

sprintf(buf2,"javaw -jar %s/VikingCopy/VikingCopy.jar",buf);

 

^^ ikke så rart at det kræsjer da ;)

 

prøv char buf2[NOK_PLASS]; evt. malloc, for nå prøver sprintf å skrive til en random adresse.

 

men det opprinnelige problemet har nok noe med env variabler å gjøre

system() kjører "javaw -classpath x:\program files\ ..."

mens de andre kallene vil kjøre bokstavelig talt "javaw -classpath %ProgramFiles% ..."

derfor må du bruke GetEnvVar først

Lenke til kommentar
  • 1 måned senere...
  • 3 uker senere...
	LPSTR buf;
int bufsize;
char* buf2;
GetEnvironmentVariable("ProgramFiles",buf,bufsize);
sprintf(buf2,"javaw -jar %s/VikingCopy/VikingCopy.jar",buf);
WinExec(buf2,SW_SHOWNORMAL);

Noe som og krasjet explorer.

 

buf og bufsize må settes før funksjonen kjøres. En enviromentvariabel er max 32 767 bytes stor. Det samme gjelder buf2. Minne blir ikke automatisk allokert. Husk også å sjekke returverdien på GetEnviromentVariable.

Bruk av sprintf er også en "sikkerhetsrisiko" siden en for stor buf, overskriver buf2, og du får en buffer overflow.

 

 

Se http://msdn2.microsoft.com/en-us/library/m...188(VS.85).aspx for mer info.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...