java - Odd opførsel af Runtime.getRuntime (). exec ()

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har nogle Java-kode, der udfører en bestemt kommando på en Windows-maskine. Det er dog adfærdens bizarre, idet den samme kommando fungerer på en maskine, men fejler på tre andre. Så vidt jeg kan fortælle, er hver af de fire maskiner identiske.


Kommandoen er dette:


cmd /c \%APP\_HOME\%....somemorepathexecutable -arg1=value1 -arg2=value2 -errorlogname=\%APP\_HOME\%logserrors.log -arg3 some more parameters


Hvor \%APP\_HOME\% er en systemvariabel sat til værdien 'D:/path/to/program'.


Fejlen jeg får er dette:



  Applikationsspecifik fejlmeddelelse om ikke at kunne åbne en af ​​logfilerne eller 'en relateret fil':
  d:/sti/til/program \ logs. errno=13, Tilladelse nægtet



Den Java jeg bruger, ser sådan ud:


Runtime.getRuntime().exec(cmdStr);


Hvor cmdStr er en streng, der indeholder kommandoen som beskrevet ovenfor. Nu, ting jeg ved, er;



  1. Jeg skal virkelig bruge den overbelaste Runtime.exec (String [[]]) metode

  2. Kommandoen bruger en blanding af frem og tilbage skråstreger



Dette er gyldige kommentarer, som jeg sandsynligvis ender med at løse problemet med, men det jeg forsøger at udarbejde er, hvorfor den præcise samme kode fejler på kun 3 ud af 4 maskiner.


Og ja, alle de stier, der er nævnt i kommandoen, findes på boksen.


Og det bliver mere mærkeligt. Hvis jeg udfører følgende (meget lignende) kommando fungerer det fint på alle fire bokse.


cmd /c \%APP\_HOME\%....somemorepathexecutable -arg1=value1 -arg2=value2 -errorlogname=D:path	oprogramlogserrors.log -arg3 some more parameters


I den ovennævnte arbejdsversion er den eneste forskel, at referencen \%APP\_HOME\% er blevet erstattet med den absolutte vej til argumentet -errorlogname. Men variablen er overladt til at pege på placeringen af ​​den eksekverbare.


Nu er det faktum, at den samme kode kører fint på en boks, at jeg har mistanke om, at problemet ikke er Java-koden. På samme måde ser blandingen af ​​skråstregningsretninger ikke ud til at være et problem, fordi denne samling fungerer på en maskine.


Efter min opfattelse skal det være forkert på hver maskine. Ikke bare en af ​​dem.


Selvfølgelig, hvis alt virkelig var identisk, ville det bryde (eller arbejde) på hver maskine. Men alle de ting, jeg har tænkt mig at se på, er identiske.


Kan nogen andre foreslå noget andet at overveje?


Mange tak.

Bedste reference


Jeg formoder, at \%APP\_HOME\% faktisk ikke er indstillet på den svigtende maskine, men du tilfældigvis lancerer scriptet i den rigtige mappe for den relative vej til den eksekverbare til arbejde. For at debugere dette yderligere skal du faktisk kontrollere, at \%APP\_HOME\% har den rigtige værdi ved at udskrive den.