2009-09-06 20 views
37

क्या जावा में व्यवस्थापक कार्यक्षमता पर नियंत्रण पाने के लिए सिस्टम से पूछने का कोई तरीका है। बिना काम किए बेशक: exe -> व्यवस्थापक के रूप में चलाएं पर राइट क्लिक करें।
मुझे क्या चाहिए कि यूएसी से विंडोज विस्टा या विंडोज 7 में एक फ्रेम आता है।जावा: व्यवस्थापक के रूप में चलाएं

या क्या मुझे जार से एक्सई बनाने के दौरान कुछ सेटिंग्स करना है?

उत्तर

20

आपको एक मेनिफेस्ट फ़ाइल बनाना है जो निर्दिष्ट करता है कि आपके एप्लिकेशन को व्यवस्थापक अनुमतियों की आवश्यकता है। आप अपने exe में प्रकट शामिल या एक अलग फ़ाइल के रूप में रख सकते हैं (yourapp.exe.manifest)

http://msdn.microsoft.com/en-us/library/bb756929.aspx

+8

पाठ्यक्रम की समस्या यह है कि "निष्पादन योग्य" JVM होगा, न कि आपका स्वयं का कोड। और चूंकि मैनिफेस्ट JVM पर लागू होता है, यह उस जेवीएम द्वारा चलाए गए किसी भी चीज़ पर लागू होता है। – MSalters

+1

क्या होगा यदि आपके पास एक रैपर एक्सई है जो जावा लॉन्च करता है? क्या व्यवस्थापक पहुंच को बाल प्रक्रिया (जेवीएम) द्वारा विरासत में प्राप्त किया जाएगा? – Cal

+3

@Cal - Yes - एक बार प्रक्रिया बढ़ने के बाद, यह सभी प्रक्रियाओं को ऊंचा कर दिया जाएगा। यूएसी ऊंचाई सचमुच उपयोगकर्ता को बदलती है कि एप्लिकेशन चल रहा है, और यह एक तरफा सड़क है - आप ऊंचा कर सकते हैं, लेकिन आप वापस नहीं आ सकते हैं। –

8

ZippyV का जवाब ठीक है अगर आप इस प्रणाली व्यवस्थापक विशेषाधिकार, साथ javaw.exe लांच करने का इरादा है जो यदि शुद्ध जावा कोड यूएसी द्वारा अवरुद्ध हो रहा है (जैसे किसी विशेषाधिकार प्राप्त निर्देशिका में फ़ाइल लिखने का प्रयास करना), तो यही वह है जो आपको करने की आवश्यकता होगी।

यदि, हालांकि, आप कुछ बाहरी लॉन्च करने की कोशिश कर रहे हैं, लेकिन केवल ऊंचाई के साथ, आप एक exe को बंडल कर सकते हैं जो कमांड को बढ़ाता है। Here is one

+0

धन्यवाद! आप आमतौर पर उपयोगकर्ता अनुप्रयोग को व्यवस्थापक (केवल कुछ विशेषाधिकार प्राप्त क्रियाओं) के रूप में चलाने के लिए नहीं चाहते हैं, इसलिए यह ज्यादातर मामलों में शायद अधिक उपयुक्त समाधान है। मुझे यह भी पसंद है कि Elevate.exe में एक-विकल्प विकल्प है ताकि आप ऊंचा कमांड पूरा होने तक ब्लॉक कर सकें। – rob

+0

यदि मैं आपका लिंक सही तरीके से पढ़ता हूं, तो उसे रजिस्ट्री को भी संशोधित करना होगा जो हमेशा एक विकल्प नहीं हो सकता है। – likejiujitsu

5

आप अपने विशेषाधिकार को बढ़ाने के लिए एक विंडोज प्रोग्राम का उपयोग कर सकते हैं। कार्यक्रम यूएसी प्रॉम्प्ट दिखाएगा और फिर आपके पास व्यवस्थापक विशेषाधिकार होगा।

http://jpassing.com/2007/12/08/launch-elevated-processes-from-the-command-line/

फिर आप इस तरह आदेश के लिए चला सकते हैं:

Runtime.getRuntime().exec("Elevate.exe yourcommand"); 
9

सबसे आसान तरीका है, अपने JVM शुरू करने के लिए एक आवरण का उपयोग करने के तो आवरण तरक्की होगी। मैं यह करने के लिए यूएसी प्लगइन के साथ एक साधारण एनएसआईएस इंस्टॉलर स्क्रिप्ट का उपयोग करता हूं:

; Java Launcher 
;-------------- 

; You want to change the below lines 
Name "my program" 
Caption "my program Launcher"  
Icon "iconfile.ico"  
OutFile "java launcher.exe" 

; param below can be user, admin  
RequestExecutionLevel admin 

!include UAC.nsh 

SilentInstall silent 
AutoCloseWindow true 
ShowInstDetails show 

Section ""  
    ; command to execute  
    StrCpy $0 'javaw -jar myjarfile'  
    SetOutPath $EXEDIR  
    Exec $0  
SectionEnd 
1

मैं इस उद्देश्य के लिए विंडोज़ पर कमांड लाइन का उपयोग करता हूं। स्टार्ट मेनू से, टेक्स्टबॉक्स में सेमीडी टाइप करें और जब प्रोग्राम cmd.exe प्रकट होता है, तो उस पर राइट क्लिक करें और व्यवस्थापक के रूप में चलाएं चुनें। अब जब आप java -jar निष्पादित करते हैं तो यह व्यवस्थापक अधिकारों के साथ चलाएगा।

+0

यह मेरे लिए काम है, बहुत आसान समाधान –

-3

स्थापना फ़ोल्डर के अंदर java.exe और javaw.exe तक पहुंचें। यानी - सी: \ प्रोग्राम फ़ाइलें \ जावा \ jre7 \ bin या C: \ प्रोग्राम फ़ाइलें \ जावा \ jdk1.7.0_17 \ bin उन पर बायाँ क्लिक करें और गुणों का चयन करें-> संगतता और वहां: "इस प्रोग्राम को चलाने के रूप में जांचें व्यवस्थापक "।

+2

के लिए धन्यवाद यह वास्तव में एक बुरा विचार है, क्योंकि यह _every_ जावा प्रोग्राम व्यवस्थापक अधिकार देता है। मैलवेयर को आपके सिस्टम को p0wn करने के लिए जावा कार्यान्वयन में सुरक्षा छेद का लाभ उठाने की भी आवश्यकता नहीं होगी, क्योंकि आपने अभी कुंजी को सौंप दिया है। –

2

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

String[] commands = {"cmd.exe", "/C" "mybatchfile.bat"}; 
    ProcessBuilder pb = new ProcessBuilder(commands); 
    .. 
    pb.start(); 

यहाँ एक धागा है कि एक विंडोज़ बैच फ़ाइल के भीतर यूएसी पहुँच का अनुरोध कर से संबंधित है: How to request Administrator access inside a batch file

नोट: ProcessBuilder से निपटने के लिए एक छोटे से मुश्किल, उत्पादन काम करता है संभालने के लिए एक StreamGobbler का उपयोग कर किया जा सकता है मेरे लिए: Handle Input using StreamGobbler

0

मैं कैसे आप ऊंचा जावा आवेदन मिलता है समझा जाएगा

import java.io.IOException; 

public class RunAsAdminExample { 
    public static void main(String[] args) throws IOException { 
     Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process <program.exe> -verb RunAs"); 
    } 
} 

program.exe उदाहरण सिर्फ notepad.exe

import java.io.IOException; 

public class RunAsAdminExample { 
    public static void main(String[] args) throws IOException { 
     Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process notepad.exe -verb RunAs"); 
    } 
} 

से आप ऊंचा कार्यक्रम मिल गया है कहते हैं। मैं तुम्हें recommand - आप से आप क्लिक कर सकते हैं Launch4j या Parcle तरह द्विआधारी आवरण में बदलने की जरूरत है - (। जावा स्विंग या AWT द्वारा किए गए) आप कस्टम संस्थापक बनाते हैं

मुझे आशा है कि आप अच्छा समाधान :) है - आप तो का उपयोग लिनक्स या मैक ओएस एक्स से आप Parcle द्विआधारी आवरण या अन्य आवरण यदि आप जानते हैं का उपयोग की आवश्यकता है ...

// संपादित अच्छा विचार Kaptkaos द्वारा से आप सरल लिखें:

import java.io.IOException; 

public class RunAsAdminExample { 
    public static void main(String[] args) throws IOException { 
     Process myappProcess = Runtime.getRuntime().exec("powershell.exe Start-Process -FilePath java.exe -Argument '-jar runasadmin.jar' -verb RunAs"); 
    } 
} 

के लिए मत भूलना स्टार्ट-प्रोसेस के आर्ग्यूमेंट से '' और '"if -jar .jar का उपयोग करें। नोट भूल नहीं है - आप निर्देशिका और जार फ़ाइल काम कर उपयोग करते हैं तो निर्देशिका उदाहरण काम करने में किया जाना चाहिए \ myjar.jar जावा \ RunAsAdminExample.class से आप तर्क के साथ ऊंचा जावा देख सकते हैं :)

सादर।।!