Windowsマシン(Windows 7が実行されている、x86-64)で、system32 / drivers/etcにある'etc/ hosts'ファイルを開き、変更してrubyから保存することは可能ですか?
「書き込み用に開かれていません(IOError)」エラーが発生しますコードは非常に単純です
file = File.open("C:/Windows/System32/drivers/etc/hosts")
file << "new line"
コードから特権を取得しようとする代わりに(異なるWindows OS間で移植できない可能性があります)、次のようにします。
このようにすることで、実行しているすべてのプログラムにも管理者権限が与えられます。
編集:これはあなたの問題です:
file = File.open("C:/Windows/System32/drivers/etc/hosts","w")
file << "new line"
ファイルを書き込みモードで開く必要があります。
私の最善の回避策は、必要に応じてルビーに昇格したコマンドプロンプトを開かせることです。ユーザーにパスワードの入力を求めますが、何もないよりはましです。
username = `whoami`.chomp
run = "runas /noprofile /user:#{username} \"cmd /C #{cmd}\""
system(run)
cmd
権限を使用して実行する任意のコマンドにすることができます。ホストファイルを編集するために私が行うことは次のとおりです。
hosts_path = 'C:\windows\System32\drivers\etc\hosts'
hosts_file = File.open(host_path,'r') {|f| f.read}
...
--edit the hosts_file here--
...
cmd = "echo \"#{hosts_file}\" > #{hosts_path}"