2010-01-03 2 views
0

У меня возникли проблемы с обновлением драйверов UMDF с использованием «devcon» во время стандартного цикла кода-развертывания-отладки . Проблема заключается в том, что «devcon update» не действительно ничего не обновляет, если номер версии или дата файла DLL и INF-файл не были изменены из того, что хранится в каталоге системы . После сумасшедшей серии экспериментов я обнаружил, что один способ заставить вещь использовать последние версии файлов, делая на следующие:Обновление драйверов UMDF во время разработки

  1. Изменить параметры, передаваемые «stampinf.exe» в «Makefile .inc "на , явно устанавливая версию с опцией -v.
  2. Изменить файл сценария ресурса («DRIVER_NAME.rc») для первого определения VER_USE_OTHER_MAJOR_MINOR_VER перед включением «ntverp.h», а затем явно определить VER_PRODUCTMAJORVERSION и VER_PRODUCTMINORVERSION. Вы получите , отметив, что эта система не позволяет нам изменять строение и номера редакций . На Win7 это , по-видимому, фиксировано на 7600 и 16385 в «ntverp.h». Это по дизайну?

Итак, я первый изменить «makefile.inc» и установите опцию «-v» к чему-то вроде «1.1.7600.16385» вручную приращения минорной версии для каждой сборки, а затем изменить файл RC и обновление VER_PRODUCTMINORVERSION с такое же число.

В качестве альтернативы, если запустить командную строку под учетной записью SYSTEM и пойти и удалить папку кэша драйвера в "C: \ WINDOWS \ system32 \ DriverStore \ FileRepository \ DRIVER FOLDER" перед работает "DevCon", то, что работает тоже.

Теперь, я думаю, что мне не хватает чего-то достаточно простого здесь, поскольку это кажется довольно болезненным способом сделать это. Пожалуйста помоги! Благодаря!

ответ

1

Почему вы не можете просто отключить устройство от сети и заменить выгруженную DLL? Вам не нужно переустанавливать драйвер, просто замените модуль. Обратите внимание, что вы не должны делать этого во время производства или что-либо, что связано с клиентами, но если вы пишете драйвер, просто захлопнитесь в новом модуле с тем же номером версии.

На Win7 это, похоже, исправлено на 7600 и 16385 в "ntverp.h". Это по дизайну?

Да, по крайней мере, до следующего пакета обновления

+0

Ну, беда система кэширует файлы драйвера в системе (в «C: \ Windows \ system32 \ DriverStore \ FileRepository \ "на Win7) и не будет пытаться использовать файлы с исходного носителя, если только версия DLL не изменилась. Удаление устройства (с помощью «devcon remove») и добавление его обратно не имеет никакого эффекта, поскольку оно все еще хранит кешированные файлы. Похоже, что здесь «удаление» означает просто удаление узла устройства из дерева системных устройств. Поэтому на данный момент мне кажется, что я действительно придерживаюсь одного из вариантов, которые я дал выше. Вздох! Если я что-то придумаю, я отправлю сюда. Спасибо! – Raj

+0

Не беспокойтесь о том, что находится в хранилище драйверов, это всего лишь кешированная копия - просто замените тот, который в настоящее время используется. Отключите устройство в диспетчере устройств, замените DLL, затем включите его снова. –

+0

Хм. Почему я не подумал об этом? Вероятно, потому, что MSDN говорит, что «правильный» способ сделать это - это использовать команду «devcon update», которая всегда собирала кешированную копию. То, что вы предлагаете, проще. Я пойду домой и сделаю это. Благодаря! Вы человек! – Raj

0

Как Пол Беттс предложил выше, путь кажется не просто заменить UMDF DLL непосредственно в папке драйвера (например c:\windows\system32\drivers\umdf\) после того, как отключив устройство либо в диспетчере устройств, либо используя «devcon». Я задал этот вопрос в новостной группе драйверов устройств Microsoft перед публикацией здесь, но не получил удовлетворительного ответа, но некоторые люди ответили там после Я разместил здесь!Так что я потерплю ссылку на этот пост, а также:

http://bit.ly/6PDxKT