SORU
28 Temmuz 2011, PERŞEMBE


ProcessBuilder ve çalışma Zamanı arasındaki fark.()exec

Java kodundan dış komut çalıştırmak için çalışıyorum, ama ben fark ettik bir fark var. kod çalışırken:

Process qq=Runtime.getRuntime().exec(
    installation_path   
    uninstall_path   
    uninstall_command   
    uninstall_arguments
);
qq.waitFor();

bu exitValue 0 ve Tamam komut sonlandırıldı.

ama ben kullanın:

Process qq=(new ProcessBuilder(
    installation_path   
    uninstall_path   
    uninstall_command   
    uninstall_arguments)
).start();
qq.waitFor();

Teşekkürler, ama ikinci kod doğru değildi. ProcessBuilder bu şekilde kullanıyorum ve hala çalışmıyor:

Process qq=(new ProcessBuilder(
    installation_path      
    uninstall_path  
    uninstall_command,
    uninstall_arguments)
).start();
qq.waitFor();

çıkış değeri 1001 ve bekle komutu verir, ancak ortasında sona erer.

Ben ProcessBuilder sorunu düzeltmek için ne yapmalıyım?

CEVAP
28 Temmuz 2011, PERŞEMBE


Runtime.getRuntime().exec(...) çeşitli aşırı ya da dize dizisi ya da tek bir dize. exec() tek dize aşırı bir dize dizisi alır exec() aşırı üzerine bir dize dizisi geçirmeden önce bağımsız bir diziye dize tokenise. ProcessBuilder kurucular, diğer taraftan, sadece bir varargs dizinin dizeleri ya da bir List bir dize, her dize dizisi veya liste kabul edilir bir tek argüman. Her iki şekilde de, bu tartışmalar ışığında yürütmek için işletim sistemi için geçirilen bir dize içine katıldı.

Yani, Windows, örneğin,

Runtime.getRuntime().exec("C:\DoStuff.exe -arg1 -arg2");

iki verilen değişkenlerle DoStuff.exe programı çalıştırın. Bu durumda, komut satırı tokenised ve tekrar bir araya koymak alır. Ancak

ProcessBuilder b = new ProcessBuilder("C:\DoStuff.exe -arg1 -arg2");

DoStuff.exe -arg1 -arg2 olan bir program C:\ olur yoksa başarısız olur. Bu tokenisation yok çünkü: çalıştırılacak komutu zaten tokenised olduğu varsayılır. Bunun yerine, kullanmanız gerekir

ProcessBuilder b = new ProcessBuilder("C:\DoStuff.exe", "-arg1", "-arg2");

ya da alternatif olarak

List<String> params = java.util.Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2");
ProcessBuilder b = new ProcessBuilder(params);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • backyardjay

    backyardjay

    8 ŞUBAT 2009
  • Caroline Saquet

    Caroline Saq

    1 EKİM 2011
  • khloe brooks

    khloe brooks

    25 Temmuz 2011