0

有一个 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'

该文件显然存在,并且可以在没有提升权限的情况下从命令提示符运行。

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

4

1 回答 1

0

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

将您的应用设置为 64 位;将目标 CPU 设置为x64或使其成为 AnyCPU 并关闭“首选 32 位”复选框

于 2021-01-03T17:57:09.663 回答