2017-08-14 42 views
0

我部署的一部分是在Windows上運行一個名爲「deploy」的Makefile上運行目標,其中包括taskkill.exe和psexec.exe。兩者都在%PATH%的c:\ windows \ system32中。Windows上的GNU Make看不到一些可執行文件

當我試圖做出這個目標時,我收到一條消息,指出無法找到psexec。 Taskkill按預期工作。

作爲一個測試,我試圖簡單地dir c:\windows\system32\psexec.exe,但從makefile,我得到一個「文件未找到」。但是,在同一個shell中,我可以運行相同的dir命令並獲得肯定的響應。

爲什麼不能看到文件存在,更少運行呢?

這裏有一個例子Makefile的目標:

exetest: 
    @echo ------------------------------ 
    -dir /b c:\Windows\System32\PsExec.exe 
    @echo ------------------------------ 
    -dir /b c:\Windows\System32\taskkill.exe 

,這是在命令提示符下會發生什麼:

C:\Users\Owner\Documents\GitHub>make exetest 
------------------------------ 
dir /b c:\Windows\System32\PsExec.exe 
File Not Found 
make: [exetest] Error 1 (ignored) 
------------------------------ 
dir /b c:\Windows\System32\taskkill.exe 
taskkill.exe 

C:\Users\Owner\Documents\GitHub>dir /b c:\Windows\System32\PsExec.exe 
PsExec.exe 

C:\Users\Owner\Documents\GitHub>dir /b c:\Windows\System32\taskkill.exe 
taskkill.exe 

我正在使用GNU make 3.81和Windows 7

我已經嘗試了psexec和psexec64 - 兩者都有相同的行爲。

+0

如果make是一個32位程序,它將無法在system32中看到64位可執行文件。你需要使用sysnative –

回答

0

的這裏的問題是make,不psexecpsexec64

所有32位進程file system redirector之下。

每當一個32位的應用程序試圖訪問%windir%\System32,訪問被重定向到%windir%\SysWOW64

看來您使用的是32位make程序。因此它不會在%windir%\System32中看到PsExec.exe。如果使用%windir%\SysWOW64\cmd.exe運行32位外殼,則此行爲相同,在這種情況下,dir /b c:\Windows\System32\PsExec.exe會給您一個找不到文件的錯誤

您必須將路徑修改爲%windir%\Sysnative\PsExec.exe

+0

我不知道%windir%\ Sysnative是一件事情。謝謝! –

+1

或者您可以更改爲64位make –