2011-02-22 64 views
3

我試圖編寫一個perl腳本,該腳本通過使用query.exe(c:\ Windows \ system32 \ query.exe)來確定哪些用戶當前已登錄到Windows。 Perl是無法訪問該文件,無法執行它,甚至看不到它的存在,因爲我用下面的代碼中發現:使用Perl調用受保護的Windows 7可執行文件

print `dir c:\\windows\\system32\\query*`; 

這將產生以下的輸出:

07/13/2009 05:16 PM   1,363,456 Query.dll 
1 File(s)  1,363,456 bytes 
0 Dir(s) 183,987,658,752 bytes free 

我已經使用perl的getlogin函數檢查了執行腳本的用戶,並且它返回本地管理員組(特別是我)的成員的名稱。我也嘗試爲「Everyone」添加讀取/執行權限,但是當我嘗試修改此文件的權限時,Windows仍然給我提供訪問被拒絕的錯誤。最後,我嘗試以管理員身份運行perl.exe,但這也不能解決問題。

這是我可以通過更改Windows中的一些設置來解決?我需要添加一些東西到我的Perl腳本?還是有沒有辦法授予perl訪問這些進程的一些?

回答

8

在我的64位機器上,我可以在Windows\System32(64位系統目錄)中找到query.exe,但不能在Windows\SysWOW64(32位系統目錄)中找到。

我懷疑你正在運行64位Windows和32位Perl,因此,在WOW64仿真下,32位Perl進程將system32重定向到SysWOW64

由於system32應該在你的路徑中,你應該能夠通過執行query.exe沒有任何路徑來執行它。如果您絕對必須參考64位系統文件夾,那麼您可以使用C:\Windows\sysnative進行32位處理。

如果我懷疑是正確的,我建議你在WOW64上做一些閱讀,因爲它可能會讓你感到困惑,直到你置身其中。另一方面,如果你已經完全瞭解它,我爲光顧而道歉。

+0

這並不是光顧,它真的很有幫助。你的設置是正確的,儘管system32位於我的路徑中,但查詢命令仍然無法訪問我的腳本。使用C:\ Windows \ sysnative完美工作。謝謝! – Jake

+0

@Jake我回滾了你的更新。在64位機器上,system32是64位文件夾,而SySWOW64是32位文件夾。混淆我知道!在你的32位Perl進程中,system32實際上被重定向到SysWOW64,這就是爲什麼你需要sysnative來定位它。 –

+0

@大衛赫夫曼男人,這也很有意義。再次感謝 :) – Jake

相關問題