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

#vb.net #klist

#vb.net #klist

Вопрос:

Есть VB.Сетевое приложение, в котором я пытаюсь вызвать klist.exe чтобы очистить кэшированные билеты Kerberos.

 Dim klist As New ProcessStartInfo("C:WindowsSystem32klist.exe")
klist.Arguments = "purge"
Process.Start(klist)
 

Отладчик выдает:

 System.ComponentModel.Win32Exception: 'The system cannot find the file specified'
 

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

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

Комментарии:

1. Ваше приложение запускается как 32-битный или 64-битный процесс? Проверьте SysWOW64 каталог.

2. Прочитайте о перенаправителе файловой системы — ваше приложение перенаправляется в папку, в которой отсутствует klist. На моем компьютере мне нужно снять флажок «предпочесть 32bit» на вкладке Компиляции настроек проекта, чтобы запустить klist.exe

3. 32 против 64 для целевого процессора, похоже, ничего не меняет.

4. Неправильно… Установка target на 64-разрядную версию исправила это. Я предположил (и мы все знаем об этом …), Что VS уже выгнал 64-разрядные файлы. Этого не было, и теперь проблема устранена. Спасибо за советы!

5. Просто совет SO :: вы должны поместить свое решение в качестве ответа, а затем пометить его как принятое, чтобы другим не приходилось читать комментарии. =)

Ответ №1:

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

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