Windows 7 скрывает файлы от Ruby? - PullRequest
0 голосов
/ 21 октября 2010

Я пытаюсь запустить программу nbtstat.exe (находится в каталоге c: \ windows \ system32) из ​​сценария ruby. Проблема заключается в том, что Windows 7 (64-разрядная версия) скрывает программу от сценария ruby ​​(он отлично работает в Vista).

Например,

Команда Nbtstat: "nbtstat"
Команда dir: dir "C: \ Windows \ System32 \ n * .exe"

Если я запускаю команду nbtstat только в командной строке, nbtstat будет работать нормально. Если я затем выполню команду dir, nbtstat.exe появится в списке файлов в этом каталоге.

Однако, если я выполню команду nbtstat из сценария ruby ​​(используя backticks, system,% x или Kernel.open), это не удастся. Если я затем выполню команду dir (также из сценария ruby), она покажет список файлов в каталоге минус nbtstat.exe и некоторые другие.

UAC выключен и запускается администратором. Я пробовал это как в ruby ​​1.8.6, так и в 1.9.2.

Я создал .bat-файл, который запускает команду nbtstat, и она работала нормально, но если я вызову .bat-файл из сценария ruby, это не удастся.

Есть идеи?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 22 октября 2010

В Win64, если вы запускаете 32-битный процесс, Windows переназначит каталог c: \ windows \ system32, чтобы он фактически указывал на c: \ windows \ syswow64. Этот каталог не содержит искомого двоичного файла, поэтому ваш 32-разрядный процесс его не видит.

Вы можете определить, так ли это, посмотрев на среду процесса (посмотрите на вывод «set» для переменных env), хотя я не знаю, как заставить процесс увидеть фактический 64-битный каталог.

0 голосов
/ 21 октября 2010

Возможно, оболочка, в которой запускается ваш скрипт ruby, была создана до инициализации PATH.Я заметил эту проблему в Windows 7. Вы можете попытаться напечатать PATH в своем скрипте, чтобы проверить, сталкивались ли вы с этой проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...