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”复选框
有一个 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”复选框