0

在 Windows 机器上(运行 Windows 7,x86-64)是否可以打开 system32/drivers/etc 中的“etc/hosts”文件,修改它并从 ruby​​ 保存?

我得到“未打开写入(IOError)”错误代码很简单

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

4

2 回答 2

2

与其尝试从代码中获取权限(可能无法在不同的 Windows 操作系统之间移植),不如这样做:

  • 以管理员身份打开命令提示符
  • 从那里运行你的脚本

通过这样做,您正在执行的所有程序也将具有管理权限。

编辑:这是你的问题:

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

您必须以写入模式打开文件。

于 2011-07-15T12:04:27.053 回答
0

我最好的解决方法是让 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}"
于 2014-05-15T17:39:28.760 回答