#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-битный»