Приложение 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-битный»