Откройте файл с правами администратора в ruby - PullRequest
0 голосов
/ 15 июля 2011

На машине с Windows (с работающей Windows 7, x86-64) можно открыть файл 'etc / hosts', который находится в system32 / drivers / etc, изменить его и сохранить из ruby?

Iошибка «не открыт для записи (IOError)» Код очень прост <pre> file = File.open("C:/Windows/System32/drivers/etc/hosts") file << "new line"

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Вместо того, чтобы пытаться получить привилегии из кода (который, возможно, не будет переносимым между различными ОС Windows), сделайте так:

  • откройте командную строку как администратор
  • запустите ваш скрипт оттуда

Таким образом, все программы, которые вы выполняете, будут иметь права администратора.

РЕДАКТИРОВАТЬ: Это ваша проблема:1011 *

file = File.open("C:/Windows/System32/drivers/etc/hosts","w")
file << "new line"

Вы должны открыть файл в режиме записи.

0 голосов
/ 15 мая 2014

Мой лучший обходной путь - это когда ruby ​​открывает командную строку с повышенными правами при необходимости.Он запросит у пользователя пароль, но лучше, чем ничего.

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}"
...