2011-01-20 22 views
5

से कहा जाता है मैं एक सरल अनुप्रयोग है कि एक कमांड लाइन तर्क में ले जाता है (जो एक Powershell PS1 फ़ाइल हो जाएगा) और फिर इसे चलाने लिखने की कोशिश कर रहा हूँ। इसलिए मैंने कई अलग-अलग दृष्टिकोणों से निष्कासित किया है और एक समस्या में भाग लेते प्रतीत होते हैं। यदि मैं जावा के भीतर से पावरहेल का आह्वान करने का प्रयास करता हूं, तो विंडोज़ प्रक्रिया शुरू हो जाती है और प्रक्रिया एक्सप्लोरर के माध्यम से दिखाई देती है, हालांकि शक्तियां कभी वापस नहीं आती हैं, यह किसी प्रकार के लूप में दिखती है। आदेश मैं उपयोग कर रहा हूँ है:Powershell प्रक्रिया फांसी जब जावा अनुप्रयोग

Runtime systemRuntime = Runtime.getRuntime(); 
Process proc = systemRuntime.exec(command); 

पल मैं कठिन PS1 फाइल करने के लिए स्थान कोडिंग कर रहा हूँ के रूप में मैं के रूप में इस से इनकार करने के लिए कोशिश कर रहा था पर:

  String command = "powershell -noprofile -noninteractive \"&C:\\new\\tst.ps1\""; 

आदेश तो का उपयोग कर मार डाला जाता है एक मुद्दा। एक प्रक्रिया एक्सप्लोरर मैं फांसी powershell प्रक्रिया को देख सकते हैं और आदेश है कि यह करने के लिए पारित किया गया था का उपयोग किया गया था:

powershell -noprofile -noninteractive "&C:\new\tst.ps1" 

करती हैं, जिसे cmd खिड़की में नकल, tst.ps1 फ़ाइल शुरू करने के लिए काम करता है। फ़ाइल इस उदाहरण में अविश्वसनीय रूप से सरल है और मुझे लगता है कि मैं फ्रीज का कारण होने पर इसे नियंत्रित कर सकता हूं क्योंकि मैंने अन्य ps1 फ़ाइलों को लॉन्च करने का प्रयास किया है, वही व्यवहार देखा जा सकता है।

आगे अगर मैं जावा कोड ऊपर पोस्ट का उपयोग करें, इस भ्रम को जोड़ सकते हैं और powershell एक फ़ाइल नाम तो यह सफलतापूर्वक चलता के बजाय आदेश में आगे बढ़ने के लिए।

मैं वेब में घूमते हैं और एक ही समस्या का सामना बहुत से लोग देखते हैं, लेकिन कोई भी, वहाँ समाधान तैनात है लगता है मैं अपने हिस्से पर अपनी एक सरल निरीक्षण आशा और आसानी से ठीक किया जा सकता है।

कोई संकेत/सुझावों की सराहना कर रहे हैं: डी

एलन

उत्तर

7

आप Powershell बाहर निकलने के लिए के लिए आदेश में OutputStream बंद करने के लिए किया है।

Runtime systemRuntime = Runtime.getRuntime(); 
Process proc = systemRuntime.exec(command); 

proc.getOutputStream().close(); 
2

मानक आउटपुट (भूल करते हैं और बाहर) करने के लिए अपने बाह्य प्रोग्राम लेखन है? यदि हां, तो यह आपके लिए जावा माता-पिता प्रक्रिया से उपभोग करने का इंतजार कर सकता है। आप

Process.getInputStream() 

और

Process.getErrorStream() 

वहाँ अधिक जानकारी के यहाँ है फोन करके InputStreams के रूप में उन प्राप्त कर सकते हैं: Javadoc for Process

+0

उत्तर के लिए धन्यवाद, मैं Process.getInputStream() कॉल का उपयोग कर Im। PS1 फ़ाइल है कि मैं सिर्फ मुझे आसानी से अपने दौड़ा जाँच करने के लिए अनुमति देने के लिए इस समय की स्थापना की है मैं जब तक यह जावा वर्ग काम कर सचमुच एक mkdir आदेश बुला रहा है मिलता है, है, यह केवल उत्पादन मानक सामान कि PowerShell अगर बाहर splurts होना चाहिए यदि आप एक फ़ोल्डर बनाने के लिए इसका इस्तेमाल करते हैं। अजीब बात यह है कि मैं उत्पादन ठीक देख अगर मैं जावा से mkdir को PowerShell आदेश फोन है, लेकिन जब जावा के बजाय सीधे PS1 फ़ाइल एक कमांड कॉल यह लटकी हुई है? कोई अन्य विचार बहुत अच्छा होगा, क्योंकि मुझे उम्मीद है कि यह वास्तव में कुछ आसान है जिसे मैंने अनदेखा कर दिया है! – Alan

+0

मुझे एसएसएच पर पीएस 1 स्क्रिप्ट को कॉल करने में कोई समस्या थी। वे नियमित रूप से कुछ मामलों में लटकाएंगे। लिपि पूरा होने के लिए दौड़ जाएगी, लेकिन वापस नहीं। यह पता चला कि कुछ stdin के लिए इंतजार कर रहा था (मुझे नहीं पता क्यों)। तो मैं सिर्फ नुल को stdin बंधे। – JasonMArcher

+0

आपके उत्तर जेसन के लिए धन्यवाद। जब आप कहते हैं कि आपने नल को stdin बांध दिया है, तो क्या यह proc की इनपुटस्ट्रीम प्राप्त करके और इसे बंद कर रहा था?मैंने proc की इनपुट और आउटपुट स्ट्रीम को बंद करने की कोशिश की है लेकिन बिना किसी किस्मत के। – Alan

संबंधित मुद्दे