tags:

views:

72

answers:

2

I am trying to run the program nbtstat.exe(located in c:\windows\system32) from a ruby script. The problem is that it appears that Windows 7(64-bit) is hiding the program from the ruby script(it works fine in Vista).

For example,

Nbtstat command: "nbtstat"
Dir command: dir "C:\Windows\System32\n*.exe"

If I run the nbtstat command in just the command line, nbtstat will run fine. If I then run the dir command, nbtstat.exe will show up in the list of files in that directory.

However, if I run the nbtstat command from the ruby script(using backticks, system, %x or Kernel.open), it will not succeed. If I then run the dir command(also from the ruby script), it will show a list of files in the directory minus nbtstat.exe and a few others.

UAC is turned off and it is being ran from an administrator. I tried this in both ruby 1.8.6 and 1.9.2.

I created a .bat file that runs the nbtstat command and it worked fine but if I call the .bat file from the ruby script it will fail.

Any ideas?

Thank you.

A: 

Maybe the shell in which your ruby script is launched was created before the PATH is initialized. I noticed this issue in Windows 7. You can try to print PATH in your script to verify if you are encountering this issue.

Codism
I tried this but it wasn't the issue. The PATH variable appears to be initialized properly.
juan2raid
+1  A: 

On Win64, if you run a 32-bit process, Windows will remap the c:\windows\system32 directory to actually point to c:\windows\syswow64. That directory doesn't contain the binary you're looking for, so your 32-bit process doesn't see it.

You can detect whether that's the case by looking at the process's environment (look at the output of "set" for the env variables), although I don't know of a way to make the process see the actual 64-bit directory.

vanza