【发布时间】:2011-04-28 06:50:24
【问题描述】:
我正在尝试从 ruby 脚本运行程序 nbtstat.exe(位于 c:\windows\system32)。问题是 Windows 7(64 位)似乎在 ruby 脚本中隐藏了该程序(它在 Vista 中运行良好)。
例如,
Nbtstat 命令:“nbtstat”
目录命令:dir "C:\Windows\System32\n*.exe"
如果我只在命令行中运行 nbtstat 命令,nbtstat 将运行良好。如果我随后运行 dir 命令,nbtstat.exe 将显示在该目录中的文件列表中。
但是,如果我从 ruby 脚本运行 nbtstat 命令(使用反引号、system、%x 或 Kernel.open),它将不会成功。如果我然后运行 dir 命令(也来自 ruby 脚本),它将显示目录中的文件列表减去 nbtstat.exe 和其他一些。
UAC 已关闭,并且正在由管理员运行。我在 ruby 1.8.6 和 1.9.2 中都试过这个。
我创建了一个运行 nbtstat 命令的 .bat 文件,它运行良好,但如果我从 ruby 脚本调用 .bat 文件,它将失败。
有什么想法吗?
谢谢。
【问题讨论】:
-
64 位?有两种可能的虚拟化方式(每种结果都表明您显示的文件夹不是您认为显示的文件夹)-一种是由您所说的 UAC 引起的,另一种是由 64 位适应引起的。那么,您是 32 位还是 64 位 Windows 7?
-
是的,它是 64 位的。 UAC 设置为“从不通知”并且计算机已重新启动。
-
你的 ruby 解释器是 32 位的吗?当您引用 c:\windows\system32 时,32 位进程实际上会看到 c:\windows\syswow64。运行 c:\windows\syswow64\cmd.exe 你也看不到那个文件。
-
@vanza 是的,就是这样。它是一个 32 位解释器。如果你做出这个答案,我可以将其标记为正确。