昇格モードでRubyスクリプトを実行する
Run Ruby Script Elevated Mode
解決:
これがその方法です。最も簡単な方法は、を使用して、回避された(管理者)権限で実行可能ファイルを再起動することです。ShellExecute。
Rubyでは、次のようにします。
require'win32ole 'shell = WIN32OLE.new(' Shell.Application ')shell.ShellExecute(' path_to_ruby_program '、nil、nil、' runas ')Windows UACを有効にしている場合、これにより、管理者権限を要求するおなじみの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
この変更されたソリューションについて、Casperとthegreendroidに感謝します。
私は彼らの例をそのまま実行することができなかったので、もう少し調査してこれをまとめました。私は少し検索しましたexecute_command、ruby 1.9.3のインストールではそれをどうするかわからず、何も見つからなかったので、バッククォートを使用しました。 NSエスケープする必要がありました。 NS2>&1ビットなので、rubyは実際には空白の文字列ではなく出力を取得し、その出力が正規表現と一致する場合/ ERROR /次に、管理者権限がないため、なし。
これにより、管理者権限で自分自身が再起動し、入力したものがすべて読み込まれます。その後のコメントで必要です。
'win32ole' def running_in_admin_modeが必要ですか? ( `reg query HKU \ S-1-5-19 2>&1` =〜/ ERROR /)。nil? running_in_admin_modeの場合は終了しますか? require './ main.rb'#実際のプログラムをここにロードします。 else path = 'rubyw.exe' + File.expand_path(__ FILE __)#オプションで 'ruby.exe' shell = WIN32OLE.new( 'Shell.Application')shell.ShellExecute(path、nil、nil、 'runas')endあなたはドロップすることができますdefブロックと変更ifステートメント
if( `reg query HKU \ S-1-5-19 2>&1` =〜/ ERROR /)。nil?簡潔にするために。また、あなたは失う可能性がありますシェル変数:
WIN32OLE.new( 'Shell.Application')。ShellExecute(path、nil、nil、 'runas')考えられる落とし穴:これは、次の場合に無限ループになる可能性がありますrunning_in_admin_mode?繰り返し失敗しますが、私にとっては完璧に機能しました。
他の作者のおかげで、私はこれを扱うようになりました(Windows 8でテスト済み):
これをrubyスクリプトの先頭に追加します。
def running_in_admin_mode? ( `reg query HKU \ S-1-5-19 2>&1` =〜/ ERROR /)。nil? running_in_admin_modeでない限り終了しますか? require'win32ole 'shell = WIN32OLE.new(' Shell.Application ')shell.ShellExecute(' ruby '、File.expand_path(__ FILE __)、nil、' runas ')exit end#管理者権限が保証されていますdo_something()または、launcher.cmdに次の内容を含めることもできます
cd full path ruby myscript.rb管理者権限でこのcmdファイルを起動します
ルビーでテストしたら、ルビーを試すことができます