Приложение VB.Net не запускает исполняемый файл klist.exe (даже из полного пути)

Имейте приложение 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'

Файл явно существует и может быть запущен без повышенных разрешений из командной строки.

Что это за хулиганство? Или я так устал, что упускаю что-то очевидное?

1 ответ

На 64-битной машине файлы внутри являются 64-битными, а файлы в c:\windows\SysWOW64это 32-битные файлы (да... я знаю, что вы хотите сказать). Фоновое перенаправление в ОС гарантирует, что 32-битные программы, пытающиеся получить доступ c:\windows\system32перенаправляются на c:\windows\syswow64чтобы они могли найти нужные им 32-битные файлы в system32. При условии klist.exeнаходится в system32 и, следовательно, 64-битном (по крайней мере, для меня ymmv), ваше приложение не находит его, значит, скорее всего, оно 32-битное и перенаправляется в папку syswow64, которая не содержит klist.exe. С другой стороны, ваш консольный сеанс не имеет этой проблемы с битностью и использует папку system32/нахождение klist.exe

Установите для своего приложения 64-битную версию; установите целевой процессор на x64или сделайте его AnyCPU и снимите флажок «Предпочитать 32-битный»

Другие вопросы по тегам