2017-08-14 47 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 –