2011-11-25 9 views
8

मुझे विंडोज के तहत उन्नत मोड (एडमिन प्राइवेटिजेज) में रूबी स्क्रिप्ट चलाने की आवश्यकता है। क्या यह संभव है?उन्नत मोड में रूबी स्क्रिप्ट चलाएं

+2

व्यवस्थापक विशेषाधिकारों के साथ टर्मिनल (cmd.exe) खोलें और वहां से रूबी चलाएं? – Casper

+0

हां, यह कुछ भी बढ़ाने का एक तरीका है ना? मुझे एक तरीका चाहिए कि मेरी स्क्रिप्ट रूबी खुद को ऊपर उठाए। स्पष्ट रूप से विंडोज़ व्यवस्थापक पासवर्ड मांगेगी, यह मेरे लिए ठीक है। –

उत्तर

10

यहां यह कैसे करें। ShellExecute का उपयोग करके उन्नत (व्यवस्थापक) विशेषाधिकारों के साथ अपने निष्पादन योग्य को पुन: प्रारंभ करना सबसे आसान तरीका है।

रूबी के साथ आप इसे इस तरह कार्य करें:

require 'win32ole' 

shell = WIN32OLE.new('Shell.Application') 
shell.ShellExecute('path_to_ruby_program', nil, nil, 'runas') 

आप Windows यूएसी सक्षम है तो यह आप पॉप वाले संवाद व्यवस्थापक विशेषाधिकार का अनुरोध करता है अप परिचित विंडोज दे देंगे। एक बार जब आप हां पर क्लिक करेंगे तो आप प्रक्रिया व्यवस्थापक अधिकारों के साथ चलेंगे।

यहां गुप्त चाल अनियंत्रित ShellExecute ऑपरेशन पैरामीटर runas का उपयोग कर रही है, जो अनुरोधित ऑपरेशन को बढ़ाएगी।

http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx

साथ ही इससे संबंधित मैन्युअल एक ऊंचा कमांड प्रॉम्प्ट शॉर्टकट (जो कुछ मामलों में एक बहुत अच्छी समाधान हो सकता है) बनाने के लिए पर चर्चा:

http://www.sevenforums.com/tutorials/3718-elevated-command-prompt-shortcut.html

1

एक अन्य विधि आप यह सुनिश्चित करना है गैर-व्यवस्थापक मोड में अपनी स्क्रिप्ट नहीं चलाएं। मुझे यह समाधान मेरे अनुभव में संतोषजनक पाया गया है।

यह एक स्क्रिप्ट इतनी तरह व्यवस्थापक मोड में चल रहा है कि क्या निर्धारित किया जा सकता -

def running_in_admin_mode? 
    query_admin_mode_cmd = 'reg query "HKU\S-1-5-19"' 
    output, exit_status = execute_command(query_admin_mode_cmd) 
    exit_status == 0 
end 

क्रेडिट उसके जवाब के लिए पीटर मैकइवोय को जाता है here

2

मैं इस संशोधित के लिए कैस्पर और thegreendroid धन्यवाद देना चाहते हैं उपाय।

मैं उनके उदाहरणों को चलाने के लिए नहीं मिला क्योंकि एक स्पर्श के साथ मैंने इसे एक साथ रखा है। मैंने execute_command की खोज की थोड़ी सी खोज की, क्योंकि मेरी रूबी 1.9.3 की स्थापना को पता नहीं था कि इसके साथ क्या किया जाए, और मुझे कुछ भी नहीं मिला, इसलिए मैंने बैकटीक्स का इस्तेमाल किया। \ से बच निकलना पड़ा। 2>&1 बिट इतना रूबी वास्तव में रिक्त स्ट्रिंग के बजाय आउटपुट प्राप्त करता है, और यदि वह आउटपुट Regexp /ERROR/ से मेल खाता है तो आपके पास व्यवस्थापकीय विशेषाधिकार नहीं हैं, इसलिए हम इसे nil वापस करना चाहते हैं।

यह प्रशासनिक विशेषाधिकारों के साथ खुद को फिर से लॉन्च करेगा और उसके बाद टिप्पणी के साथ require में जो कुछ भी लगाएगा उसे लोड करें।

require 'win32ole' 
def running_in_admin_mode? 
    (`reg query HKU\\S-1-5-19 2>&1` =~ /ERROR/).nil? 
end 

if running_in_admin_mode? 
    require './main.rb' # load the actual program here. 
else 
    path = 'rubyw.exe ' + File.expand_path(__FILE__) # optionally 'ruby.exe ' 
    shell = WIN32OLE.new('Shell.Application') 
    shell.ShellExecute(path, nil, nil, 'runas') 
end 

आप def ब्लॉक ड्रॉप और संक्षिप्तता की खातिर

if (`reg query HKU\\S-1-5-19 2>&1` =~ /ERROR/).nil? 

करने के लिए if बयान बदल सकता है।

WIN32OLE.new('Shell.Application').ShellExecute(path, nil, nil, 'runas') 

संभव पकड़ लिया: इसके अलावा, आप shell चर खो सकता है इस लूप अनंत सकता है अगर running_in_admin_mode? बार-बार विफल रहता है, लेकिन यह मेरे लिए पूरी तरह से काम किया।

एक गहरे लाल रंग का स्क्रिप्ट के शीर्ष पर इस जोड़ें::

+1

'ShellExecute' वाक्यविन्यास होना चाहिए: ' shell.ShellExecute ("rubyw.exe", पथ, "", 'runas') ' अधिक जानकारी यहां मिल सकती है: http://rubyonwindows.blogspot.com.es/ 2007/05/शुरू-क्षुधा और मुद्रण-डॉक्स-with.html –

2

अन्य लेखकों के लिए धन्यवाद, मैं (विंडोज़ पर परीक्षण किया 8) इस के साथ काम करने के लिए आए हैं

def running_in_admin_mode? 
    (`reg query HKU\\S-1-5-19 2>&1` =~ /ERROR/).nil? 
end 

unless running_in_admin_mode? 
    require 'win32ole' 
    shell = WIN32OLE.new('Shell.Application') 
    shell.ShellExecute("ruby", File.expand_path(__FILE__), nil, 'runas') 
    exit 
end 

# admin rights ensured 
do_something() 

या फिर आप हो सकता था एक launcher.cmd

cd full\path 
ruby myscript.rb 

और युक्त व्यवस्थापक अधिकार के साथ इस cmd फ़ाइल का शुभारंभ

हे nce आपने रूबी के साथ परीक्षण किया है, आप rubyw

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