【问题标题】:VB.Net app won't launch klist.exe executable (even from full path)VB.Net 应用程序不会启动 klist.exe 可执行文件(即使从完整路径)
【发布时间】:2021-01-03 08:39:03
【问题描述】:

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

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

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

【问题讨论】:

  • 您的应用是作为 32 位还是 64 位进程运行的?检查SysWOW64 目录。
  • 了解File System Redirector - 您的应用程序被重定向到不存在 klist 的文件夹。在我的电脑上,我需要在项目设置的编译选项卡中取消勾选“首选 32 位”才能启动 klist.exe
  • 32 vs 64 for Target CPU 似乎没有任何改变。
  • 错误... 将目标设置为 64 位已修复此问题。我假设(我们所有人都知道这样做那个......)VS已经踢出64位文件。不是,现在问题已解决。感谢您的提示!
  • 只是一个 SO 提示:: 您应该将您的解决方案作为答案,然后将其标记为已接受,这样其他人就不必通读 cmets。 =)

标签: vb.net klist


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2012-07-21
    相关资源
    最近更新 更多