VB.Net 应用程序不会启动 klist.exe 可执行文件(即使来自完整路径)

VB.Net app won't launch klist.exe executable (even from full path)

有一个 VB.Net 应用程序,我在其中尝试调用 klist.exe 来清除缓存的 Kerberos 票证。

Dim klist As New ProcessStartInfo("C:\Windows\System32\klist.exe")
klist.Arguments = "purge"
Process.Start(klist)

调试器吐出:

System.ComponentModel.Win32Exception: 'The system cannot find the file specified'

文件 显然 存在,并且可以 运行 无需 从命令提示符提升权限。

这是什么傻逼?还是我太累了,错过了一些明显的东西?

在 64 位机器上,c:\windows\system32 中的文件是 64 位文件,c:\windows\SysWOW64 中的文件是 32 位文件(是的..我知道你要说什么)。 OS 中的后台重定向确保尝试访问 c:\windows\system32 的 32 位程序被重定向到 c:\windows\syswow64,这样他们就可以从 system32 中找到他们认为需要的 32 位文件。鉴于 klist.exe 在 system32 中,因此是 64 位(至少对我来说,ymmv),您的应用找不到它意味着它很可能是 32 位并被重定向到 syswow64 文件夹,该文件夹不包含 klist.exe.另一方面,您的控制台会话没有这个位数问题,并且正在使用 system32 folder/finding klist.exe

将您的应用设置为 64 位;将 Target CPU 设置为 x64 或设为 AnyCPU 并关闭“Prefer 32bit”复选框