2010-10-20 67 views
0

我想從ruby腳本運行程序nbtstat.exe(位於c:\ windows \ system32)。問題是,似乎Windows 7(64位)是從ruby腳本隱藏程序(它在Vista中正常工作)。Windows 7是否隱藏Ruby的文件?

例如,

nbtstat命令: 「使用nbtstat」
導演命令:dir 「C:\ WINDOWS \ SYSTEM32 \ N * .EXE」

如果我在剛剛命令運行nbtstat命令行,nbtstat將運行良好。如果我然後運行dir命令,則nbtstat.exe將顯示在該目錄中的文件列表中。然而,如果我從ruby腳本(使用反引號,系統,%x或Kernel.open)運行nbtstat命令,它將不會成功。如果我然後運行dir命令(也來自ruby腳本),它將顯示目錄中的文件列表minus nbtstat.exe和其他幾個文件。

UAC已關閉,正在從管理員處運行。我在紅寶石1.8.6和1.9.2中都試過了。

我創建了一個運行nbtstat命令的.bat文件,它工作正常,但如果我從ruby腳本調用.bat文件,它將失敗。

任何想法?

謝謝。

+0

64位?有兩種可能的虛擬化方式(每種都會導致您顯示的文件夾不是您認爲顯示的文件夾) - 一種是由UAC引起的,您說的是關閉的,另一種是由64位的適應性引起的。那麼,你是32位還是64位的Windows 7? – 2010-10-20 23:22:34

+0

是的,它是64位。 UAC被設置爲「從不通知」,並且計算機已被重新啓動。 – juan2raid 2010-10-20 23:28:50

+0

你的Ruby解釋器是32位的嗎?當您引用c:\ windows \ system32時,32位進程實際上會看到c:\ windows \ syswow64。運行c:\ windows \ syswow64 \ cmd.exe,您將無法看到該文件。 – vanza 2010-10-21 21:04:55

回答

2

在Win64上,如果您運行32位進程,Windows將重新映射c:\ windows \ system32目錄以實際指向c:\ windows \ syswow64。該目錄不包含您正在查找的二進制文件,因此您的32位進程沒有看到它。

您可以通過查看進程環境(查看env變量的「set」輸出)來檢測是否出現這種情況,儘管我不知道如何讓進程查看實際的64位數據,位目錄。

0

也許你的ruby腳本啓動的shell是在PATH初始化之前創建的。我在Windows 7中注意到了這個問題。您可以嘗試在腳本中打印PATH以驗證您是否遇到此問題。

+0

我試過這個,但這不是問題。 PATH變量似乎被正確初始化。 – juan2raid 2010-10-20 22:07:17

相關問題