2009-07-02 15 views
14

जावा एप्लिकेशन के भीतर से उन्नत अनुमतियों के लिए पूछना संभव है? मैंने जो सुझाव देखा है, वे सभी बाहरी निष्पादन योग्य चलाने या लॉन्च पर विशेषाधिकारों का अनुरोध करने के लिए एक मैनिफेस्ट स्थापित करने के आसपास केंद्रित हैं। उदाहरण के लिए, एप्लेट्स के लिए ये उपलब्ध नहीं हैं। क्या चल रहे एप्लिकेशन से उन्नयन का अनुरोध करने का कोई तरीका है?यूएसी और जावा

+0

http://stackoverflow.com/questions/1385866/java-run-as-administrator/1385901#1385901 देखें, जो विशेषाधिकार प्राप्त कार्यों को करने के लिए एक अलग उन्नत प्रक्रिया लॉन्च करने के लिए Elevate.exe उपयोगिता का उपयोग करने का सुझाव देता है। – rob

+0

यह जेएनए के माध्यम से किया जा सकता है। [यह] देखें (http://stackoverflow.com/questions/11041509/elevating-a-processbuilder-process-via-uac) – dARKpRINCE

उत्तर

8

यूएसी ऐसा कुछ नहीं है जो चलने वाली प्रक्रिया का अनुरोध कर सके (इससे कोई फ़र्क नहीं पड़ता कि आप किस भाषा में चल रहे हैं)। आपको लॉन्च समय पर उन्नयन का अनुरोध करना होगा।

तरीका है कि सबसे खिड़कियों एप्लिकेशन इसका संभाल (और यह देखो की तरह वे ऊंचाई अनुरोध कर रहे हैं बनाने के) के लिए खुद की एक अतिरिक्त प्रति अंडे देने के लिए, ऊंचाई का अनुरोध, और नई प्रक्रिया के लिए पर्याप्त आदेश पंक्ति तर्क गुजर है ताकि उपयुक्त संवाद प्रदर्शित किया जा सकता है।

यही कारण है कि एक संवाद में यूएसी ऊंचाई हमेशा एक बटन क्लिक द्वारा शुरू की जाती है जो एक नया संवाद खोलता है।

तो, जावा दुनिया में, आपको बस इतना करना है कि हर किसी को क्या करना है: उन्नयन का अनुरोध करते हुए अपना ऐप लॉन्च करें। उन्नत लॉन्च करने के कई तरीके हैं, 'रन के रूप में' क्रिया संभवतः सबसे आसान है।

+1

ऊंचाई अनुरोध पर अधिक जानकारी कृपया। मैं Google पर खाली आ रहा हूं और "रनस" का उपयोग करने की कोशिश कर रहा हूं बस विफल रहता है (यह संवाद को पॉप करने के बजाय सीएलआई से पासवर्ड ढूंढ रहा है)। –

+0

@ ब्रायन - क्या यह मदद करता है? http://stackoverflow.com/questions/1797695/how-to-runlaunch-elevated-command-promt-programmiticaly-in-vista - यदि नहीं, तो आप जिस कोड का उपयोग कर रहे हैं उसके साथ एक नया प्रश्न बनाएं और इस टिप्पणी के लिंक को पोस्ट करें धागा और मैं देखूंगा कि मैं कौन सी मदद कर सकता हूं। –

+0

@ केविन भयभीत नहीं है। मैं नेट का उपयोग नहीं कर रहा हूँ, मैं जावा का उपयोग कर रहा हूँ।इसके अलावा, मैं पहले से जावा समकक्ष कर रहा हूं। मैं जो भी चाहता हूं उसे उसी ऊंचाई स्तर पर लॉन्च करने में सक्षम हूं, लेकिन जब मैं इसे अपने ऐप से इस तरह से आगे बढ़ाने की कोशिश करता हूं, तो यह बिना किसी त्रुटि के और तुरंत कुछ भी किए बिना वापस उछालता है। कमांड लाइन से यह कमांड लाइन पासवर्ड प्रॉम्प्ट फेंकता है। –

3

ऐसा लगता है कि सूर्य को जेआरई में उस तरह की स्थिति को संभालना होगा क्योंकि बाह्य प्रक्रिया चलाने से ऊंचे कार्यों को करने का कोई अन्य तरीका नहीं है।

यदि जेआरई ने इसका समर्थन किया है, तो जेवीएम को ऊंचाई के अनुरोध के लिए जावा कोड के लिए शायद एक अलग, उन्नत प्रक्रिया चलनी होगी।

अभी के लिए, हालांकि, केवल प्रकट होने या बाहरी अनुप्रयोग चलाने के लिए केवल एक ही समाधान उपलब्ध है, जहां तक ​​मुझे पता है।

सवाल यह है कि, आपको किसके लिए ऊंचाई की आवश्यकता है?

+2

अतीत में, हम कुछ मूल कोड स्थापित करने और लोड करने के लिए हस्ताक्षरित एप्लेट का उपयोग करने में सक्षम थे। Vista पर यूएसी सक्षम होने पर यह अब संभव नहीं है, भले ही जावा का सुरक्षा मॉडल स्पष्ट रूप से इसकी अनुमति देता है। – joegester

+0

जावा प्राथमिकता API (सिस्टम स्तर) विफल रहता है यदि यूएसी भी चालू है ... –

2

आपको ऐसा करने के लिए बाहरी (मूल) एप्लिकेशन का उपयोग करना होगा। UAC Prompt From Java

0

आप jna का उपयोग करें और एक ShellExec कर सकता है: इस पोस्ट में स्रोत कोड और एक महान विवरण उपलब्ध कराती है। एलपी ऑपरेशन के लिए "रनस" का उपयोग करें (यह दस्तावेज नहीं है)। चूंकि आपको संभावित रूप से (वर्तमान) जावावीएम के पूर्ण पथ की आवश्यकता है, जो कि registry access पर रजिस्ट्री दृष्टिकोण में संग्रहीत है, जेएनए का हिस्सा है।

0

जावा उस फ़ोल्डर को गोटो करें जहां जावा स्थापित है। javaw.exe/java.exe के गुणों को खोलें और "व्यवस्थापक के रूप में चलाएं" विकल्प को सही सेट करें।

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