Avatar billede nielsbrinch Nybegynder
28. januar 2002 - 14:33 Der er 18 kommentarer og
1 løsning

RIGTIG eksekvering af fil

Jeg har lært at eksekvere en fil via http://www.eksperten.dk/spm/161611

Tak for det - men det eksekverer filen forkert. De fleste programmer der eksekveres på den måde virker ikke som de skal ... jeg tror programmet ikke kan finde sine egne dll-filer osv. fordi det ikke ved hvilken sti det befinder sig i.

Hvordan gør jeg så programmerne eksekveres rigtigt? Kan jeg angive på en eller anden måde hvor computeren skal tro den befinde sig, inden den eksekverer programmet?
Avatar billede disky Nybegynder
28. januar 2002 - 14:38 #1
prøv ved hjælp af en .bat fil som sætter tingene korrekt op.

p.s. Jeg har aldrig haft problemmer med den måde jeg viste i det spørgsmål du refererer til.
Avatar billede nielsbrinch Nybegynder
28. januar 2002 - 14:43 #2
Jeg fik aldrig din løsning til at virke pga. følgende fejl ved udførelse af Runtime.exec(hircPath):

"Nida.java": Error #: 308 : non-static method exec(java.lang.String) cannot be referenced from a static context at line 118, column 23

Det virkede dog med:
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("C:\\Program Files\\GTS\\GTS.exe");

Din idé med bat-filen virker ikke, da det kan være mange forskellige programmer der skal eksekveres, og ikke programmer som jeg har kontrol over.
Avatar billede disky Nybegynder
28. januar 2002 - 14:46 #3
den jeg postede i den gamle tråd kl. 21/01-2002 13:57:25 virkede med sikkerhed, på de ting jeg prøvede.

Hvorfor har du postet 2 næsten identiske spørgsmål ?
Avatar billede nielsbrinch Nybegynder
28. januar 2002 - 14:49 #4
Jeg har lukket det andet spørgsmål - der skete en time-out ved det første spørgsmål, så jeg troede ikke det var oprettet.

Jeg tjekker din løsning igen - jeg regnede med at når begge virkede, virkede de sikkert også på samme måde.
Avatar billede carstenknudsen Nybegynder
28. januar 2002 - 14:49 #5
Hvordan går det galt med eksekveringen, kan du ikke
fortælle hvilke fejlbeskeder du får ved eksekvering.
Avatar billede nielsbrinch Nybegynder
28. januar 2002 - 14:52 #6
Jeg har kigget igen, og det er din løsning nummer 2 jeg bruger - altså den som skaber en instans af Runtime i stedet for at bruge den som fri funktionsklasse, og kører det hele gennem Process.

Det er den jeg bruger - som tilsyneladende virker, men som kører programmerne på en forkert måde, så de kommer med fejlmeddelelser (som ikke kommer når jeg bare kører dem normalt i Windows)
Avatar billede nielsbrinch Nybegynder
28. januar 2002 - 15:13 #7
Fejl kan være:
[2002-1-22][22:24:1] An internal error has occored. Error ID #1000
(i øvrigt underligt at der er stavefejl i sådan en fejlbesked)

ERROR: Cannot Find the pb.ini File

Derudover kommer der fejl inde i selve programmerne, de virker simpelt hen ikke som de skal - men programmerne opdager det typisk ikke selv, for det er vist ikke fejl de er parat på kan ske.
Avatar billede carstenknudsen Nybegynder
28. januar 2002 - 15:27 #8
Det lyder til at være et Windows problem, jeg har
ingen problemer med, f.eks. at starte en browser
via exec metoden.
Avatar billede nielsbrinch Nybegynder
28. januar 2002 - 15:36 #9
Prøv med noget mere komplekst end en browser - og noget der ikke er lavet af Microsoft. Der sker ikke fejl når jeg starter de programmer normalt, kun når jeg starter dem gennem java-programmet.
Avatar billede carstenknudsen Nybegynder
28. januar 2002 - 15:40 #10
En browser er vel nogenlunde kompliceret!
Jeg kører Linux så alt er ikke-Microsoft.
Derfor tror jeg at det er et Windows problem.
Avatar billede kresten Nybegynder
28. januar 2002 - 15:41 #11
Hvad er GTS for en slags program?
Avatar billede nielsbrinch Nybegynder
28. januar 2002 - 15:45 #12
GTS er et program jeg selv har lavet - det er bare et eksempel, og det virker vist fint nok.

F.eks. skal HalfIRC startes, og det virker ikke første gang - først skal man indstille det (selvom det under normale omstændigheder ikke er nødvendigt), og så virker det anden gang. Det viser sig at en HalfIRC.ini som normalt er inde i HalfIRC-biblioteket er blevet oprettet.

Det beviser at jeg havde ret i min først antagelse om at programmet ikke ved hvor det selv bliver eksekveret fra - det virker som om selve exe-filen bliver kopieret over til mit java-program, og kørt derfra (uden sine tilhørende filer)
Avatar billede carstenknudsen Nybegynder
28. januar 2002 - 15:54 #13
Med System.getProperty("user.dir") får du det direktorie
hvor din virtuelle maskine er startet med program
eksekvering. Det er klart at det også har betydning for
exec metoden. Du kan prøve at sætte user.dir med
System.setProperty("user.dir","c:\\Program Files\\GTS")
og se om det ikke hjælper.
Avatar billede kresten Nybegynder
28. januar 2002 - 16:08 #14
Jeg tror Niels har ret mht til at JVM'en ikke rigtig ved hvor den er henne i verden jeg har samme problem hvor jeg har en executable jar som skal loade nogle xml dokumenter den ikke kan finde af samme grund.

Så tak til dig Carsten for dette indlæg! Vil prøve det når jeg kommer hjem og kan kode alt det sjove men ikke må på arbejde :)
Avatar billede carstenknudsen Nybegynder
28. januar 2002 - 16:16 #15
Husk at sætte user.dir tilbage efter eksekveringen.
Avatar billede nielsbrinch Nybegynder
28. januar 2002 - 16:32 #16
Det var præcis det jeg ledte efter - men det virker desværre stadig på samme måde ... *hulk*

System.setProperty("user.dir", tmpPath);
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(hircPath);

hvor tmpPath er c:\halfirc\ og hircPath er c:\halfirc\HalfIRC.exe

Jeg har også prøvet med tmpPath på c:\halfirc (uden den sidste backslash, men med samme resultat)

Din System.setProperty("user.dir", tmpPath) er ellers indstillet rigtigt, jeg har testet den med System.out.print
Avatar billede kresten Nybegynder
28. januar 2002 - 16:36 #17
Nu ved jeg ikke hvad dit GTS program gør, men halfirc... er det en IRC klient eller sådan noget? Kunne det tænkes at hvis programmet er startet under en java process så er den måske undelagt JVM security eller sådan noget? Giver bare ikke helt mening hvis man kan starte en browser?
Avatar billede nielsbrinch Nybegynder
28. januar 2002 - 16:46 #18
HalfIRC er en irc-klient til at bruge inde i Half-Life
Cheating-Death er et antisnydeprogram til Counter-Strike
Ligeledes er PunkBuster og Paladin - ingen af dem virker.

Det kan meget vel være at JVM beskytter på en måde - så spørgsmålet må vendes til at høre hvordan man fjerner den sikkerhed, eller omgår den.
Avatar billede nielsbrinch Nybegynder
30. januar 2002 - 13:39 #19
Jeg lukker spørgsmålet, da det ikke lader til at der er nogen der kender en løsning på mit ret specifikke problem ... men mange tak for hjælpen, jeg lærte en masse andet :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester