【问题标题】:Does Windows 7 hide files from Ruby?Windows 7 是否对 Ruby 隐藏文件?
【发布时间】: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 位解释器。如果你做出这个答案,我可以将其标记为正确。

标签: ruby windows-7


【解决方案1】:

在 Win64 上,如果您运行 32 位进程,Windows 将重新映射 c:\windows\system32 目录以实际指向 c:\windows\syswow64。该目录不包含您要查找的二进制文件,因此您的 32 位进程看不到它。

您可以通过查看进程的环境来检测是否是这种情况(查看 env 变量的“set”输出),尽管我不知道如何让进程看到实际的 64 位目录。

【讨论】:

    【解决方案2】:

    也许启动 ruby​​ 脚本的 shell 是在 PATH 初始化之前创建的。我在 Windows 7 中注意到了这个问题。您可以尝试在脚本中打印 PATH 以验证您是否遇到此问题。

    【讨论】:

    • 我试过了,但这不是问题。 PATH 变量似乎已正确初始化。
    猜你喜欢
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多