Раздел удаления my .INF

#windows #device-driver

#Windows #драйвер устройства

Вопрос:

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

Я обнаружил, что когда я удаляю драйвер из Add / Remove, кажется, что он мало что делает, если вообще что-либо делает. Это было в .INF, поскольку я унаследовал его:

 [myUninstall]
DelReg = myDelReg

[MyDelReg]
HKLM, "SOFTWAREMicrosoftWindowsCurrentVersionUninstallmyName"
  

Я не могу найти никаких других ссылок, даже там, где установлено «myName» при удалении реестра.

Я изменил .INF, чтобы иметь это:

 [DefaultUninstall]
myUninstall

[myUninstall]
DelFiles = ... a list of files ...
DelDirs  = UNINST.Dirs
DelReg   = UNINST.Regs
Cleanup  = 1

[UNINST.Dirs]
422%%InstallDir%

[UNINST.Regs]
myDev.AddReg
myDev.CommonRegs


[myDev.AddReg]      ; same definition used for installing
HKR,,Drivers,Subclasses,,"wave,midi,mixer,aux"
...

[myDev,CommonRegs]  ; same definition used for installing
HKR, Parameters, BufferSize, 0x0010001, 256
...
  

Тем не менее, независимо от того, удаляю ли я из панели управления Установку и удаление программ или делаю это из диспетчера устройств, система не жалуется, и, похоже, ничего не происходит. Я просмотрел выходные данные «dpinst / c» и setupapi.log, и ни один из них не говорит мне многого. dpinst не показывает ошибки, но явно даже не пытается выполнить мой раздел удаления.

Я нахожу в Интернете много многословия и примеров разделов удаления, но очень мало объяснений. Сегодня я наткнулся на одно предложение на 1 форуме, в котором подразумевалось, что устройство PnP .В INF не используется функция удаления. Возможно, это моя проблема?

  1. ошибаюсь ли я, думая, что у меня может быть удаление в этом .INF?
  2. есть ли какой-нибудь другой способ сообщить, что происходит?
  3. это мой единственный способ написать отдельный деинсталлятор?

Ответ №1:

AFIK, INF-файлы не участвуют в удалении.

Вам нужно будет написать отдельный деинсталлятор, если вы хотите выполнить надлежащую очистку.

Далее обратите внимание, что в Vista и за ее пределами Windows также включает хранилище драйверов, куда она автоматически копирует пакет драйверов (ссылки на inf и файлы из inf). Если вы хотите выполнить полную очистку, хранилище драйверов также следует очистить.

Ответ №2:

Я не думаю, что DefaultUninstall это стандартный раздел в том виде, в каком он есть DefaultInstall . Часто вы увидите, что UninstallString запись ARP просто вызывается DefaultUninstall по имени.

Документация в этой области довольно плохая, и существует разделение между базовыми файлами SetupAPI / SetupX INF и файлами Advanced INF (AdvPack).

Единственное известное мне исключение от сторонних разработчиков — TweakUI.inf из Windows 95 PowerToys.

В нем есть части, которые выглядят следующим образом:

 ...

[Optional Components]
TweakUIInstall

[TweakUIInstall]
CopyFiles = ...
AddReg    = ...
Ini2Reg   = ...
...
InstallType    = 10 ;Typical, Custom.
Uninstall      = DefaultUnInstall

[DefaultUnInstall]
DelFiles  = ...
DelReg    = ...
  

Но я думаю, что это работает только с функцией дополнительных компонентов, а не с базовой деинсталляцией. TweakUI v1.33 (Tweakui.exe В SFX archive) есть еще несколько записей, связанных с NT, и я полагаю, что способ, которым он записывает UninstallString для NT, даже записывает неправильный раздел INF. Неправильно или нет, он вручную должен указать раздел INF для обычного удаления.